我有一个df
带有唯一ID列表的pandas DataFrameid
和一个带有所有已知ID的主列表的DataFrame master_df.id
。我试图找出最好的方式来执行isin
,它还会向我返回值所在的索引。所以如果我的DataFrame是
master_df
原为
index id
1 1
2 2
3 3
并且df
是
index id
1 3
2 4
3 1
我想要类似的东西(3, False, 1)
。我当前正在执行“操作”,然后通过循环强行查找,但我敢肯定有更好的方法。
一种方法是进行合并:
In [11]: df.merge(mdf, on='id', how='left')
Out[11]:
index_x id index_y
0 1 3 3
1 2 4 NaN
2 3 1 1
并且index_y列是期望的结果*:
In [12]: df.merge(mdf, on='id', how='left').index_y
Out[12]:
0 3
1 NaN
2 1
Name: index_y, dtype: float64
*除了NaN vs. False,但我认为NaN是您真正想要的。正如@DSM所指出的那样,在python中False == 0
,您可能会遇到以False作为代表ID为0的缺失vs的代表的麻烦。(如果仍然要这样做,则使用,将NaN替换为0 .fillna(0)
)。
注意:仅关注您感兴趣的列可能会更有效:
df[['id']].merge(mdf[['id', 'index']], on='id', how='left')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句