Pandas:根据数据帧之间的比较,组合不同形状的数据帧

时间:2018-05-12 20:33:37

标签: python pandas numpy dataframe

我有两个dfs:

df1:
no1    no2    other1
1      10     foo
1      50     foo
1      60     cat
1      70     cat
3      12     cat

df2:
no1    start    stop    other2
1      2        40      dog
1      100      200     dog
3      5        15      dog

我想在以下条件下合并df1df2

1)no1列匹配,如果那是真的那么

2)df1['no2']介于df2['start']df2['stop']之间:

上述示例的所需输出将是(不需要start/stop列,确实需要所有其他列):

df3:
no1    no2    other1    other2
1      10     foo       dog
3      12     cat       dog

我尝试过的解决方案(复杂,可能效率不高):我认为np.where可能会为我做这件事,使用下面的代码,然后删除df['merge'] = no所有的行。但它给了我一个Can only compare identically-labeled Series objects错误,我认为这与dfs的大小不同有关。效率/速度很重要,所以即使我能解决错误,我认为这也不是可行的方法。

df2['merge'] = np.where((df1['no1'] == df2['no1'] & df2['start'] < df1['no2'] < df2['stop']), yes, no)

1 个答案:

答案 0 :(得分:2)

外合并

merged = pd.merge(df1, df2, how='outer')

然后过滤行

>>> merged[(merged.start <= merged.no2) & (merged.no2 <= merged.stop)][['no1', 'start', 'stop', 'other2']]
no1 start   stop    other2
0   1   2   40  dog
8   3   5   15  dog