【问题标题】:how do i compare date columns in two different data frames based on the same ID如何基于相同的 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, 你如何比较日期和字符?
  • 抱歉打错了。我正在尝试比较日期。但是我会指定要比较的日期列。
  • 你为什么不加入表格?

标签: python pandas loops dataframe if-statement


【解决方案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 参数,将其删除,然后将排序重新分配给相同的名称。
猜你喜欢
  • 1970-01-01
  • 2020-03-15
  • 2017-12-07
  • 1970-01-01
  • 2021-12-18
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多