Python 为不带isnull的NaN值筛选数据帧

Python 为不带isnull的NaN值筛选数据帧,python,pandas,Python,Pandas,我有一份清单a: 以及数据帧df: 我想创建一个列表,以获得索引列表,其中列表中的每个值等于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.

我有一份清单a:

以及数据帧df:

我想创建一个列表,以获得索引列表,其中列表中的每个值等于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]
使用“合并”,了解其工作原理检查链接


为您提供您想要的内容,并且基本上只是重新确定现有if语句的用途,请尝试:


B=[df[pd.isnulldf.Y]。如果pd.isnullx是df[df.Y==x],则索引[0]。A中x的索引[0]

能否显示输出的外观?
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]
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