首页 > 解决方案 > Pandas:比较多列以合并数据框

问题描述

我有两个比这大得多的数据框,但它们的形式是:

df1 = pd.DataFrame({'col1': ['a', 'b', 'b', 'c'],
                   'start': [1, 5, 10, 15],
                   'end': [4, 9, 14, 19]})
df2 = pd.DataFrame({'col1': ['a', 'b', 'b', 'c'],
                   'value': [2, 6, 12, 20],
                  'etc': [1, 2, 3, 4]})

我想根据按此顺序检查两件事来合并它们:1)col1匹配,2)value介于start和之间end。我在想类似的事情(但第一==行不起作用):

if df1.col1 == df2.col1:
    if df1.start < df2.value < df1.end:
        df1.merge(df2)

我不知道这是否会检查 df1 中的所有行与 df2 中的所有行?此示例的所需输出为:

dfoutput = pd.DataFrame({'col1': ['a', 'b', 'b'],
                        'start': [1, 5, 10],
                        'end': [4, 9, 14],
                        'value': [2, 6, 12],
                        'etc': [1, 2, 3]})

标签: pandasdataframe

解决方案


您可以先合并并检查值,

new_df = df1.merge(df2)
new_df.where(new_df.value.between(new_df.start, new_df.end)).dropna()


    col1    start   end     value   etc
0   a       1.0     4.0     2.0     1.0
1   b       5.0     9.0     6.0     2.0
4   b       10.0    14.0    12.0    3.0
5   c       15.0    19.0    16.0    4.0

推荐阅读