首页 > 解决方案 > 过滤没有 isnull 的 NaN 值的 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 循环并使用 isnull 来完成上述操作,如下所示,但是有没有办法通过列表理解来做到这一点?

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]

标签: pythonpandas

解决方案


给你你想要的东西(基本上只是重新利用你现有的 if 语句),尝试:

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


推荐阅读