我的初始数据看起来像是
>>> left
id a
0 3397088 1968
1 3420060 1969
2 3420089 1969
>>> right
lid foo amin amax
0 3397088 1 1968 2000
1 3420060 2 1969 2000
2 3420089 1 1969 2000
我想要做的是合并排序
result = pd.merge(left, right, how=inner, left_index="id", right_index="lid")
但是,左行有时会有多个右行。但是,总有一个也满足(right.amin <= left.a) & (right.amax >= left.a)
。所以,最好的方法是以某种方式将它放入合并中。我没有设法,所以我的第二种方法是首先进行how=right
合并,抓住所有行然后按组进行:
由于效果似乎较差,我更愿意使用result.set_index('id').index.get_duplicates()
而不是result.groupby('id').filter(lambda x: len(x) > 1)
找到重复项。但是,这给我留下了重复(和浮点)索引的列表:
Out[48]:
[3419915.0,
3419947.0,
(...)
6009542.0]
那么,为了获得重复的行,我想到了
duplicates = pd.DataFrame(right.set_index(['lid']).index.get_duplicates(), columns={'id'})
right.set_index(['PATENT'], inplace=True)
rows = right.ix[duplicates['id']]
但现在我陷入困境:下一步做什么是聪明的方式? - 还是有一个更整洁的方法?