python - 比较两个数据框而不考虑一列
问题描述
我想知道如何比较两个df并保留第一个df中但不在第二个df中的值,而不考虑Timestamp列,因为它不同,因为它反映了程序执行的时间。
如果有一行在 df2 中而不在 1 中,我不想要该行,因为我只对 df1 中的内容感兴趣,而不对 df2 中的内容感兴趣
数据框 1:
一个 | 乙 | 开始 | 结尾 | 时间戳 |
---|---|---|---|---|
A1 | B1 | 2022-01-15 | 2022-02-15 | 2021-05-17 |
A1 | B1 | 2021-07-15 | 2021-10-17 | 2021-05-17 |
A1 | B1 | 2021-07-30 | 2021-10-02 | 2021-05-16 |
A1 | B2 | 2022-01-01 | 2023-01-01 | 2021-05-17 |
A1 | B2 | 2021-06-02 | 2021-06-04 | 2021-05-16 |
数据框 2:
一个 | 乙 | 开始 | 结尾 | 时间戳 |
---|---|---|---|---|
A1 | B1 | 2022-01-15 | 2022-02-15 | 2021-05-16 |
A1 | B1 | 2021-07-15 | 2021-10-17 | 2021-05-16 |
A1 | B1 | 2021-07-30 | 2021-10-02 | 2021-05-15 |
A1 | B3 | 2021-07-02 | 2021-08-04 | 2021-05-14 |
结果:
一个 | 乙 | 开始 | 结尾 | 时间戳 |
---|---|---|---|---|
A1 | B2 | 2022-01-01 | 2023-01-01 | 2021-05-17 |
A1 | B2 | 2021-06-02 | 2021-06-04 | 2021-05-16 |
谢谢!
解决方案
比较来自 2 个数据帧的行时,您始终可以使用pd.merge
. 在这里,我们使用它:
on=[…]
与要比较的列,how='outer'
包括在一个数据框中但不在另一个数据框中的行indicator=True
知道哪些数据框行来自suffixes
设置以便您要保留的剩余列不变
>>> df = pd.merge(df1, df2, on=['A', 'B', 'Start', 'End'], how='outer', suffixes=('', '_other'), indicator=True)
>>> df
A B Start End Timestamp Timestamp_other _merge
0 A1 B1 2022-01-15 2022-02-15 2021-05-17 2021-05-16 both
1 A1 B1 2021-07-15 2021-10-17 2021-05-17 2021-05-16 both
2 A1 B1 2021-07-30 2021-10-02 2021-05-16 2021-05-15 both
3 A1 B2 2022-01-01 2023-01-01 2021-05-17 NaN left_only
4 A1 B2 2021-06-02 2021-06-04 2021-05-16 NaN left_only
5 A1 B3 2021-07-02 2021-08-04 NaN 2021-05-14 right_only
>>> df.loc[df['_merge'] == 'left_only', df1.columns]
A B Start End Timestamp
3 A1 B2 2022-01-01 2023-01-01 2021-05-17
4 A1 B2 2021-06-02 2021-06-04 2021-05-16
推荐阅读
- asp.net-core - ASP.net Core API 如何处理并发
- python - 使用 python open-cv 分割报纸文章
- vue.js - 访问元素属性时Vue $refs未定义
- r - 不能对可能存在的列进行子集化
- c++ - 持续“错误 C2220:以下警告被视为错误”
- javascript - 为什么在 JS 函数调用完成后应用样式?
- angularjs - 带有异步管道的 Angular *ngfor 在 api 发布请求后不会更新 DOM
- nginx - nginx - 完全不区分大小写的 URL 匹配和文件查找
- c# - Fody PropertyChanged Weaver 导致内存问题
- reactjs - AWS S3:CORS 配置未实施