Python 条件合并/获取重复行

Python 条件合并/获取重复行,python,pandas,Python,Pandas,我的初始数据看起来像 >>> 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 我想做的是这样的合

我的初始数据看起来像

>>> 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)
。所以,最好的办法是以某种方式将其合并。我没有做到这一点,因此我的第二种方法将是首先进行
how=right
合并,获取所有行,然后进行分组:

由于它的性能似乎较差,我更喜欢使用
result.set\u index('id').index.get\u duplicates()
而不是
result.groupby('id').filter(lambda x:len(x)>1)
。但是,这给我留下了一个重复(和浮动)索引列表:

因此,为了得到重复的行,我考虑

duplicates = pd.DataFrame(right.set_index(['lid']).index.get_duplicates(), columns={'id'})
right.set_index(['PATENT'], inplace=True)
rows = right.ix[duplicates['id']]

但现在我陷入了困境:下一步明智的做法是什么还是有更整洁的方法

你确定
result=pd.merge(left,right,left_on=“id”,right_on=“lid”,how='left')
做你想做的事吗?我正在做
how='right'
-这会给我所有的左边行(是的,给定数据库,在这个过程中没有左边的行会掉下来),但另外,所有匹配的右边行都会掉(当每左一行超过一个时,所有的都是)。这回答了你的问题吗?
duplicates = pd.DataFrame(right.set_index(['lid']).index.get_duplicates(), columns={'id'})
right.set_index(['PATENT'], inplace=True)
rows = right.ix[duplicates['id']]