如果数据框中的大多数列相等,则 Pandas 设置值



从另一个我昨天做过的问题开始 熊猫设置值,如果数据帧中的所有列都相等

从@anky_91解决方案开始,我正在研究类似的东西。 如果所有列都相等,我想要更灵活的东西,而不是放1-1。 事实上,我想1(例如)列的 70% 百分比是否1-1相同但相反的条件,0其他条件。

这就是我写的:

# Instead of using .all I use .sum to count the occurence of 1 and 0 for each row
m1 = local_df.eq(1).sum(axis=1)
m2 = local_df.eq(0).sum(axis=1)
# Debug print, it work
print(m1)
print(m2) 

但我不知道如何更改这部分:

local_df['enseamble'] = np.select([m1, m2], [1, -1], 0)
m = local_df.drop(local_df.columns.difference(['enseamble']), axis=1)

我用伪代码写我想要的东西:

tot = m1 + m2
if m1 > m2
if(m1 * 100) / tot > 0.7 # simple percentage calculus
df['enseamble'] = 1
else if m2 > m1
if(m2 * 100) / tot > 0.7 # simple percentage calculus
df['enseamble'] = -1   
else: 
df['enseamble'] = 0

谢谢

编辑 1

以下是预期输出的示例:

NET_0  NET_1  NET_2  NET_3  NET_4  NET_5  NET_6   
date                                                                                                                                                                                                            
2009-08-02      0     1    1    1    0    1
2009-08-03      1     0    0    0    1    0
2009-08-04      1     1    1    0    0    0

date    enseamble
2009-08-02     1 # because 1 is more than 70%
2009-08-03     -1 # because 0 is more than 70%
2009-08-04     0 # because 0 and 1 are 50-50

您可以从以下条件获取指定的输出:

thr = 0.7
c1 = (df.eq(1).sum(1)/df.shape[1]).gt(thr)
c2 = (df.eq(0).sum(1)/df.shape[1]).gt(thr)
c2.astype(int).mul(-1).add(c1)

输出

2009-08-02    0
2009-08-03    0
2009-08-04    0
2009-08-05    0
2009-08-06   -1
2009-08-07    1
dtype: int64

或使用np.select

pd.DataFrame(np.select([c1,c2], [1,-1], 0), index=df.index, columns=['result'])
result
2009-08-02       0
2009-08-03       0
2009-08-04       0
2009-08-05       0
2009-08-06      -1
2009-08-07       1

尝试使用(m1m2tot与您拥有的相同):

cond1=(m1>m2)&((m1 * 100/tot).gt(0.7))
cond2=(m2>m1)&((m2 * 100/tot).gt(0.7))

df['enseamble'] =np.select([cond1,cond2],[1,-1],0)
m =df.drop(df.columns.difference(['enseamble']), axis=1)
print(m)
enseamble
date                 
2009-08-02          1
2009-08-03         -1
2009-08-04          0

最新更新