Python:如何在熊猫中进行条件运算?

时间:2018-07-22 12:15:41

标签: python pandas

我有一个像下面这样的数据框df

df   A   B    C
0    1   0.7 0.3
1    0   0.2 0.8
2    0   0.8 0.2
3    1   0.6 0.4
4    1   0.9 0.1

我想创建一个列D,其值是(1-B) if A==1(1-C) if A==0。所以

df   A   B    C    D
0    1   0.7 0.3  0.3
1    0   0.2 0.8  0.2
2    0   0.8 0.2  0.8
3    1   0.6 0.4  0.4
4    1   0.9 0.1  0.1

2 个答案:

答案 0 :(得分:4)

如果BC列的总和得到1,则可以使用numpy.where而不减去:

df['D'] = np.where(df['A'] == 0, df['B'], df['C'])
print (df)
   A    B    C    D
0  1  0.7  0.3  0.3
1  0  0.2  0.8  0.2
2  0  0.8  0.2  0.8
3  1  0.6  0.4  0.4

如果要使用公式,并且A列仅包含10值:

df['D'] = np.where(df['A'] == 0, 1 - df['C'], 1 - df['B'])
print (df)
   A    B    C    D
0  1  0.7  0.3  0.3
1  0  0.2  0.8  0.2
2  0  0.8  0.2  0.8
3  1  0.6  0.4  0.4
4  1  0.9  0.1  0.1

如果A列中有多个值(最通用的解决方案),请使用numpy.select

print (df)
   A    B    C
0  1  0.7  0.3
1  0  0.2  0.8
2  0  0.8  0.2
3  1  0.6  0.4
4  3  0.9  0.1 <- added 3

m1 = df['A'] == 0
m2 = df['A'] == 1
df['D'] = np.select([m1, m2], [1 - df['C'], 1 - df['B']], default=np.nan)
print (df)
   A    B    C    D
0  1  0.7  0.3  0.3
1  0  0.2  0.8  0.2
2  0  0.8  0.2  0.8
3  1  0.6  0.4  0.4
4  3  0.9  0.1  NaN

答案 1 :(得分:0)

Capturenp.select()是必经之路。

还有一个选择,也可以做

np.where()