筛选熊猫数据帧以获取NaN值而没有isull

时间:2019-03-05 15:52:07

标签: python pandas

我有一个列表A

A = [nan, 2, 3, 4, 6]

还有一个熊猫数据框df

index     X        Y
0         A        NaN
1         B        2
2         C        6
3         D        4
4         E        3

我想创建一个列表推导来获取索引列表,其中列表中的每个值都等于Y列。通常我会这样做:

B = [df[df.Y == x].index[0] for x in A]

但是,这不适用于A的第一个元素nan。显然,我可以使用普通的for循环并使用isull来完成上述操作,如下所示,但是有没有办法通过列表理解做到这一点?

B = []
for x in A:
    if pd.isnull(x):
        B.append(df[pd.isnull(df.Y)].index[0])
    else:
        B.append(df[df.Y == x])

预期结果:

B = [0,1,4,3,2]

2 个答案:

答案 0 :(得分:1)

为您提供所需的内容(实质上只是重新使用现有的if语句),请尝试:

B = [df[pd.isnull(df.Y)].index[0] if pd.isnull(x) else df[df.Y == x].index[0] for x in A]

答案 1 :(得分:0)

使用merge,了解其工作方式,检查链接Why does pandas merge on NaN?

A = [np.nan, 2, 3, 4, 6]
pd.DataFrame({'Y':A}).merge(df,how='left')
Out[394]: 
     Y  index  X
0  NaN      0  A
1  2.0      1  B
2  3.0      4  E
3  4.0      3  D
4  6.0      2  C