首页 > 解决方案 > 使用 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是要走的路,但我似乎找不到合适的方法让它与该功能一起使用。

任何帮助将不胜感激。

标签: pythonpandas

解决方案


尝试

greater_date = lambda row1,row2: row1 if row1['Date'] > row2['Date'] else row2
df1.combine(df2, greater_date)

推荐阅读