如何基于相同的 ID 比较两个不同数据框中的日期列
Posted
技术标签:
【中文标题】如何基于相同的 ID 比较两个不同数据框中的日期列【英文标题】:how do i compare date columns in two different data frames based on the same ID 【发布时间】:2019-02-26 07:45:19 【问题描述】:熊猫
我有两个数据框,想做一个嵌套循环。
我想从 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
【问题讨论】:
if col2 in df1 is less than col3 in df2,
你如何比较日期和字符?
抱歉打错了。我正在尝试比较日期。但是我会指定要比较的日期列。
你为什么不加入表格?
【参考方案1】:
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
【讨论】:
Anaconda3\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame ---------- - 当我尝试排序时出现此错误 @VuLe 您的数据框是其他数据框的视图。而不是 inplace 参数,将其删除,然后将排序重新分配给相同的名称。以上是关于如何基于相同的 ID 比较两个不同数据框中的日期列的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas 连接两个数据框中的不同列(并附加相似的列)
检查日期是不是在另一个数据框中的两个日期之间,如果是则操作日期