我有两个比这大得多的数据框,但它们的形式为:
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)
我不知道这是否会对照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]})
答案 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