我在Pandas中有一个DataFrame:
name type A B C
n1 t1 1 32 3
n2 t1 52 2437 3
n3 t2 21 0 100
n4 t1 53 2005 2
n5 t2 34 1 200
我要创建的是另一个DataFrame,方法是添加通过操作列A
,B
和C
获得的另一个列。
具体来说,我希望当类型为t1
时,该列将计算为A/C
;当类型为t2
时,该列将被计算为B/C
。
如何实现这种条件创造?
答案 0 :(得分:2)
IIUC您可以使用numpy.where
和isin
:
df['new'] = np.where(df['type'].isin(['t1']), df.A/df.C, df.B/df.C )
print df
name type A B C new
0 n1 t1 1 32 3 0.333333
1 n2 t1 52 2437 3 17.333333
2 n3 t2 21 0 100 0.000000
3 n4 t1 53 2005 2 26.500000
4 n5 t2 34 1 200 0.005000
df.loc[df['type'].isin(['t1']), 'new'] = df.A / df.C
df.loc[df['type'].isin(['t2']), 'new'] = df.B / df.C
print df
name type A B C new
0 n1 t1 1 32 3 0.333333
1 n2 t1 52 2437 3 17.333333
2 n3 t2 21 0 100 0.000000
3 n4 t1 53 2005 2 26.500000
4 n5 t2 34 1 200 0.005000