熊猫:比较多个列以合并数据框

时间:2018-12-31 05:58:03

标签: pandas dataframe

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

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)valuestartend之间。我在想类似的东西(但是第一行==无效)

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

我不知道这是否会对照df2中的所有行来检查df1中的所有行?此示例的期望输出为:

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

1 个答案:

答案 0 :(得分:4)

您可以先合并并检查其值,

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