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

问题描述 投票:1回答:1

我有两个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)
python pandas numpy dataframe
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.