我有一个包含2列的数据框,我想根据2列之间的比较创建第3列。
所以逻辑是: 第1列val = 3,第2列val = 4,因此新列值为空
第1列val = 3,第2列val = 2,因此新列为3
它与先前被问过的problem非常相似,但是使用np.where()
我的答案并不适用于我这是我尝试的内容:
FinalDF['c'] = np.where(FinalDF['a']>FinalDF['b'],[FinalDF['a'],""])
然后失败了,我试着看看它是否不喜欢[x,y]我给它,所以我尝试了:
FinalDF['c'] = np.where(FinalDF['a']>FinalDF['b'],[1,0])
结果总是:
ValueError: either both or neither of x and y should be given
编辑:我还删除了[x,y],看看会发生什么,因为documentation说它是可选的。但我仍然得到一个错误:
ValueError: Length of values does not match length of index
这很奇怪,因为它们位于相同的数据帧中,虽然一列确实有一些Nan值。
我认为我不能use np.select,因为我有条件。我已经与之前的问题相关联,因此读者可以在以后的问题中引用它们。
感谢您的帮助。
答案 0 :(得分:3)
我认为这应该有效:
FinalDF['c'] = np.where(FinalDF['a']>FinalDF['b'], FinalDF['a'],"")
示例:
FinalDF = pd.DataFrame({'a':[4,2,4,5,5,4],
'b':[4,3,2,2,2,4],
})
print FinalDF
a b
0 4 4
1 2 3
2 4 2
3 5 2
4 5 2
5 4 4
输出:
a b c
0 4 4
1 2 3
2 4 2 4
3 5 2 5
4 5 2 5
5 4 4
或如果列b
必须具有更高的列a
值,请使用:
FinalDF['c'] = np.where(FinalDF['a']<FinalDF['b'], FinalDF['b'],"")
输出:
a b c
0 4 4
1 2 3 3
2 4 2
3 5 2
4 5 2
5 4 4