用于在Pandas中创建新列的np.where()问题(可能是NaN问题?)

时间:2018-05-04 08:42:41

标签: python pandas numpy where

我有一个包含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,因为我有条件。我已经与之前的问题相关联,因此读者可以在以后的问题中引用它们。

感谢您的帮助。

1 个答案:

答案 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