Skip to content Skip to sidebar Skip to footer

Pandas Set Value If Most Columns Are Equal In A Dataframe

starting by another my question I've done yesterday Pandas set value if all columns are equal in a dataframe Starting by @anky_91 solution I'm working on something similar. Instead

Solution 1:

You could obtain the specified output from the following conditions:

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)

Output

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

Or using 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

Solution 2:

Try with (m1 , m2 and tot are same as what you have):

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

Post a Comment for "Pandas Set Value If Most Columns Are Equal In A Dataframe"