python - 使用 pandas 更新时比较 2 个数据框中的日期
问题描述
在这种情况下,我一直在尝试使用另一个数据框更新一个数据框
df.update(other)
我的数据框如下所示
df1
| Date | Note | PC | T |
|------------|----------|-------|---|
0 | 10/1/2021 | Complete | 8017 | 2 |
1 | 9/28/2021 | Pending | 5019 | 2 |
2 | 9/7/2021 | Canceled | 8015 | 1 |
3 | 4/21/2021 | Complete | 8870 | 1 |
4 | 1/1/2020 | Pending | 8305 | 3 |
df2
| Date | Note | PC | T |
|------------|----------|-------|---|
0 | 10/20/2021 | Pending | 8017 | 2 |
1 | 9/14/2021 | Complete | 5019 | 2 |
2 | 9/3/2021 | Canceled | 8015 | 1 |
我想做,df1.update(df2)
但前提是df2['Date'] > df1['Date']
所以首先我要做的是:
df1.set_index('PC', drop=False, inplace=True)
df2.set_index('PC', drop=False, inplace=True)
所以我可以更新正确的索引,但是当我尝试比较日期时,我不知所措。
我的预期结果是这样的:
df1
| Date | Note | PC | T |
|------------|----------|-------|---|
8017 | 10/20/2021 | Pending | 8017 | 2 |
5019 | 9/28/2021 | Pending | 5019 | 2 |
8015 | 9/7/2021 | Canceled | 8015 | 1 |
8870 | 4/21/2021 | Complete | 8870 | 1 |
8305 | 1/1/2020 | Pending | 8305 | 3 |
我已经阅读了update
文档,我发现filter_func
filter_func callable(1d-array) -> bool 1d-array, optional 可以选择替换NA以外的值。对于应该更新的值返回 True。
但是当我尝试类似的东西时
df1.update(df2, filter_func = df2['Date] > df1['Date'])
它不起作用。
似乎这filter_func
是要走的路,但我似乎找不到合适的方法让它与该功能一起使用。
任何帮助将不胜感激。
解决方案
尝试
greater_date = lambda row1,row2: row1 if row1['Date'] > row2['Date'] else row2
df1.combine(df2, greater_date)
推荐阅读
- angular - 构建角度应用程序,获取应用程序中使用的所有图像,dist 文件夹中的字体文件而不是常规资产文件夹?为什么?
- linux - 如何将文件的第一个值传递给变量?
- reactjs - ObservableMap (mobx) 在视图中返回未定义
- sql - How to query ODBC with Dapper with multiple parameters including a WHERE IN?
- azure - ARM REST API 中的多个资源过滤器
- java - 如何在正在运行的 Java 应用程序上使用 JaCoCo 进行即时检测
- join - 如何从带有连接的选择结果中更新单个字段
- html - 如何在图像上放置文字
- css - PrimeNg 扩展行全宽容器
- node.js - 基于访问域的Nodejs数据库配置