2017-04-05 95 views
4

我有三列A,B和C.我想根据C的值创建第四列D,它包含A或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 

在上述例子中,柱采用d塔A的值,如果C的值是1,如果C的值是0列B的值有一种优雅的方式做它在熊猫?感谢您的帮助。

回答

1

pandas
考虑到OP的要求

有一种优雅的方式做到这一点的熊猫吗?

我优雅
地道纯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 

响应的意见发表评论

你会如何修改熊猫的答案,而不是0,1在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 
+0

有趣的赌注非常不可读...... –

+0

你会如何修改大熊猫回答如果不是0,1列C你有A,B? – user6566438

+0

@ user6566438我已更新我的帖子 – piRSquared

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