【问题标题】:Get rows with min date associated with every ID获取与每个 ID 关联的最小日期的行
【发布时间】:2021-08-27 13:41:53
【问题描述】:

我有一个带有多个 ID 的 pandas 数据框,并且在其他列中我有一个日期列说:'date1'。我想获取与所有 ID 关联的最小日期的所有行。其他列值也应保留。

我有什么:

ID   date1        value
1    1/1/2013     a
1    4/1/2013     a
1    8/3/2014     b
2    11/4/2013    a
2    19/5/2016    b
2    8/4/2017     b

我想要的输出:

ID   date1      value
1    1/1/2013   a
2    11/4/2013  a

谢谢

【问题讨论】:

    标签: python python-3.x pandas date


    【解决方案1】:

    假设您在ID 中有ID,在DATE 中有日期:

    df.groupby('ID')['DATE'].min()
    

    按您的 ID 分组,然后选择每个组中的最小值。返回一个系列。如果你想要一个数据框,那么在输出上调用_.reset_index()。

    如果您只想选择最少的行,我会将输出设置为键,然后设置new_df.join(old_df.set_index(['ID', 'DATE']),而不是处理一些基于索引的恶作剧。

    【讨论】:

      【解决方案2】:

      转换为日期时间:

      df = df.assign(date1 = pd.to_datetime(df.date1))
      

      获取最小值和子集的标签索引:

      df.loc[df.groupby("ID").date1.idxmin()]
      
         ID      date1 value
      0   1 2013-01-01     a
      3   2 2013-11-04     a
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        • 2021-08-08
        • 1970-01-01
        • 2020-02-12
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        相关资源
        最近更新 更多