python - 根据特定列查找两个 python 数据帧的差异
问题描述
我想根据S/N
andMetric
列比较数据框,以查找从 df2 中的最新值更改的值:
df1
# S/N Age Metric
# 0 001 2.59 1.01
# 1 002 3.57 2.42
# 2 003 3.99 3.12
df2
# S/N Age Metric
# 0 001 2.46 4.29
# 1 001 2.50 2.46
# 2 001 2.54 2.47
# 3 002 1.78 1.24
# 4 002 1.82 2.42
# 5 003 3.57 1.91
# 6 003 3.61 2.47
# 7 003 3.65 1.24
我正在寻找以下数据框:
S/N Age Metric
0 001 2.59 1.01
2 003 3.99 3.12
数据
df1 = pd.DataFrame({
"S/N": ['001', '002', '003'],
"Age": [2.59, 3.57, 3.99],
"Metric": [1.01, 2.42, 3.12]
})
df2 = pd.DataFrame({
"S/N": ['001','001','001', '002','002', '003', '003', '003'],
"Age": [2.46, 2.50, 2.54, 1.78, 1.82, 3.57, 3.61, 3.65],
"Metric": [4.29, 2.46, 2.47, 1.24, 2.42, 1.91, 2.47, 1.24]
})
解决方案
这里大致涉及两个步骤。首先,您需要比较df1
和df2
,并基于该比较来过滤您的数据。
第 1 步:比较
要根据 column进行比较df1
,请运行:df2
Metric
df1['Metric'] != df2['Metric']
0 True
1 False
2 True
3 False
第 2 步:过滤
True
在熊猫中,您可以使用仅包含或False
值的熊猫系列(“单列数据框”)过滤行:
inds = df1['Metric'] != df2['Metric']
df2.loc[inds, :]
S/N Age Metric
# 0 001 2.46 4.29
# 2 003 2.00 2.47
推荐阅读
- r - 将 n 个列表组合成 2 列标题
- django - Django重命名上传的文件:在末尾附加特定的字符串
- amazon-web-services - API Gateway 对 AWS Batch 的直接请求
- forms - Symfony Forms:将 CallbackTransformer 添加到 EventListener 中添加的字段
- docker - 使用 fastapi、alembic、docker、lambda 运行数据库迁移
- python - opengl中四边形的颜色与指定的不同
- ruby-on-rails - 如何从 Job 内部将 csv 文件写入 S3?
- server - Outlook 加载项 . 此平台不支持 API
- python - 拆分嵌套 json 中的数据以进行一些计算
- java - 为我的 Android 应用添加贝宝和信用卡方法