我有一个pandas DataFrame df
,其中包含唯一ID id
的列表,以及一个包含所有已知ID master_df.id
的主列表的DataFrame。我正在试图找出预先形成isin
的最佳方法,它也会返回值所在的索引。所以如果我的DataFrame是
master_df
index id
1 1
2 2
3 3
和df
index id
1 3
2 4
3 1
我想要像(3, False, 1)
这样的东西。
我正在做一个正在进行然后查看然后用循环强制查找,但我确信有更好的方法来做它。
答案 0 :(得分:3)
一种方法是进行合并:
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与False之外,我认为NaN is what you really want在这里。正如@DSM所指出的那样,在python False == 0
中你可能会遇到False的问题,因为缺少vs的代表被发现为id 0.(如果你仍然想要这样做,那么用{{0}将NaN替换为0 1}})。
注意:只关注您关注的列可能会更有效:
.fillna(0)