我有三列,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中有优雅的方法吗?谢谢您的帮助。
答案 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