【问题标题】:How to compare 2 Dataframes of unequal length based on Datetime column如何根据日期时间列比较 2 个长度不等的数据帧
【发布时间】:2020-09-11 09:59:31
【问题描述】:

我有 2 个数据帧,我想从 badges 数据帧中删除其值大于 test_df 数据帧中相应 UserId's date 字段的行。问题是两个数据帧都有多个UserId 的值,并且两个数据帧的总行数不相等。我使用的代码只有在两个数据帧的行数相等时才有效,否则会产生错误。

部分徽章

UserId | Date
101    | 2009-09-01 15:17:50.660
101    | 2009-09-01 15:17:50.660
101    | 2009-09-02 15:17:50.660
102    | 2009-09-03 15:17:50.660
103    | 2013-09-30 15:17:50.660
103    | 2013-09-30 15:17:50.660
104    | 2009-09-30 15:17:50.660

test_df 的一部分

UserId | date
101    | 2010-09-01 15:17:50.660
101    | 2010-09-02 15:17:50.660
101    | 2010-09-03 15:17:50.660
102    | 2010-09-30 15:17:50.660
103    | 2010-09-30 15:17:50.660
103    | 2010-09-30 15:17:50.660

代码

badges = badges[(badges.Date < test_df.date)]

错误

ValueError: Can only compare identically-labeled Series objects

所需输出

badges

UserId     | Date
    101    | 2009-09-01 15:17:50.660
    101    | 2009-09-01 15:17:50.660
    101    | 2009-09-02 15:17:50.660
    102    | 2009-09-03 15:17:50.660
    104    | 2009-09-30 15:17:50.660

【问题讨论】:

    标签: python python-3.x pandas dataframe datetime


    【解决方案1】:

    将日期转换为日期时间:

    badges["Date"] = pd.to_datetime(badges["Date"])
    test_df["date"] = pd.to_datetime(test_df["date"])
    

    迭代以获取徽章日期小于 test_df 日期的值: 从 itertools 导入产品

    valid_dates = {
        badge_date
        for badge_date, test_df_date in product(badges.Date.unique(), test_df.date.unique())
        if badge_date < test_df_date
    }
    

    使用 valid_dates 过滤徽章:

    badges.loc[badges["Date"].isin(valid_dates)]
    
        UserId  Date
    0   101     2009-09-01 15:17:50.660
    1   101     2009-09-01 15:17:50.660
    2   101     2009-09-02 15:17:50.660
    3   102     2009-09-03 15:17:50.660
    6   104     2009-09-30 15:17:50.660
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-07
      • 2020-02-10
      • 2014-01-27
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2022-06-19
      • 2017-04-23
      相关资源
      最近更新 更多