Pandas使用条件选择的两列中的任何一列来创建列

时间:2016-01-26 12:41:31

标签: python pandas dataframe conditional-statements

我在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,方法是添加通过操作列ABC获得的另一个列。 具体来说,我希望当类型为t1时,该列将计算为A/C;当类型为t2时,该列将被计算为B/C

如何实现这种条件创造?

1 个答案:

答案 0 :(得分:2)

IIUC您可以使用numpy.whereisin

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

或者更好更安全locisin

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