我有一个列表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]
答案 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