pandas - 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]})
解决方案
您可以先合并并检查值,
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
推荐阅读
- sql - 用联合连接子查询(一个表有两个条件)
- android - 使用 FrameLayout 创建 DialogFragment
- microsoft-graph-api - 就地存档邮件的父 ID 错误
- ssl - 树莓派上不支持 SSL 的协议
- postgresql - PostgreSQL - 如何在另一列上添加具有默认条件的新列?
- gatsby - gatsby-source-cloudinary:如何将视频和图像都添加到资源类型标签中?
- html - 如何摆脱 SVG 占用的空间以及为什么无法更改其大小?
- javascript - Mongoose Pagination - 在第一次查询时限制为 1,然后在后续查询中限制为 10
- javascript - 如何存储json下拉列表中的项目
- objective-c - 屏幕锁定时如何将数据发送到隐藏设备