python - 如何根据相同的 ID 比较两个不同数据框中的日期列
问题描述
熊猫
我有两个数据框,想做一个嵌套循环。
我想从df1迭代每一行并选择col1(id)和col2。
然后,它将获取 ID 并遍历 df2 并检查该行是否具有相同的 ID,然后将 df1 中的日期列与 df2 中的日期列进行比较
如果 df1 中的 col2 小于 df2 中的 col2,它将返回 True 并将其附加到 df1 的行。
基本上我想做的是,或者,如果有更快的方法
for(row : df1){
for(row : df2){
if (df1.row[col1] == df2.row[col1]){
if(df1.row[col2] < df2.row[col2])
return df1.row[col3] == True
else
row[col3] == False
df1
col1 col2 col3 col4
01 01/01/2018 S True
02 11/21/2018 F False
03 04/03/2018 C True
df2
col1 col2 col3
01 10/01/2018 A
02 01/01/2018 A
02 01/31/2018 F
02 10/01/2018 D
02 09/01/2018 V
03 02/01/2018 W
03 07/01/2018 X
解决方案
pandas.merge_asof
首先,为了merge_asof
工作,您需要按日期排序
df1.sort_values(['col2', 'col1'], inplace=True)
df2.sort_values(['col2', 'col1'], inplace=True)
现在我们可以合并
pd.merge_asof(
df1, df2.rename(columns={'col3': 'col4'}),
on='col2', by='col1', direction='forward'
).assign(col4=lambda d: d.col4.notna())
col1 col2 col3 col4
0 1 2018-01-01 S True
1 3 2018-04-03 C True
2 2 2018-11-21 F False
推荐阅读
- r - R子集年龄括号?
- r - 使用 R 和 4000 多个变量的随机森林
- java - 如何访问 Par.Do 转换中的管道选项?
- html - 如果它们都在那里,则在 p 和 blockquote 元素周围放置框
- c# - 如何使用 SetActive(false) 禁用精灵
- c++ - 为什么 is_copy_assignable 的实现不起作用?
- sql-server - T-SQL 脚本 goto 找不到标签
- cloud - 谷歌云存储为一些公共文件返回 NoSuchKey 而没有命名问题
- c# - 多线程应用程序中的 Mongodb C# 驱动程序问题
- loops - gnu make - 如何用shell遍历列表?(需要 TeXLive)