根据pandas中的第三列保留两列之间的值

时间:2017-04-05 10:44:25

标签: python pandas

我有三列,A,B和C.我想根据C的值创建包含A或B值的第四列D.例如:

   A   B   C   D 
0  1   2   1   1
1  2   3   0   3
2  3   4   0   4
3  4   5   1   4

在上面的例子中,如果C的值为1,则列D取A列的值,如果C的值为0,则取列B的值。在Pandas中有优雅的方法吗?谢谢您的帮助。

2 个答案:

答案 0 :(得分:8)

使用numpy.where

In [20]: df
Out[20]:
   A  B  C
0  1  2  1
1  2  3  0
2  3  4  0
3  4  5  1

In [21]: df['D'] = np.where(df.C, df.A, df.B)

In [22]: df
Out[22]:
   A  B  C  D
0  1  2  1  1
1  2  3  0  3
2  3  4  0  4
3  4  5  1  4

答案 1 :(得分:1)

<强> pandas
考虑到OP的请求

  

Pandas有优雅的方式吗?

我对优雅的看法
和惯用的纯pandas
assign + pd.Series.where

df.assign(D=df.A.where(df.C, df.B))

   A  B  C  D
0  1  2  1  1
1  2  3  0  3
2  3  4  0  4
3  4  5  1  4

对评论的回复

  

你如何修改pandas的答案,而不是0,在C栏中你有A,B?

df.assign(D=df.lookup(df.index, df.C))

   A  B  C  D
0  1  2  A  1
1  2  3  B  3
2  3  4  B  4
3  4  5  A  4