【问题标题】:Create columns with first and last date from a unique ID从唯一 ID 创建具有第一个和最后一个日期的列
【发布时间】:2021-02-22 01:36:58
【问题描述】:

我有下面的数据集,我想从该特定 ID 中提取第一次和最后一次出现日期。最后和第一次出现的结果应该是这样的:

id            date           last_apparence     first_apparence
653777        2021-02-19     2021-02-19         2021-02-19
1873547       2021-02-19     2021-02-19         2021-02-19
657443        2021-02-19     2021-02-19         2021-02-19
653777        2021-02-20     2021-02-20         2021-02-19

因此,例如,ID 653777 出现在 19 日和 20 日,在这种情况下,第一次出现是 19 日,最后一次出现是 20 日。我尝试使用

我尝试在下面使用此代码,但为整个列获得相同的值。

df['latest_apparence'] = df['date'][df.index[-1]]

我的最后一种方法是进行 groupby,但即使尝试了一堆不同的组,我得到的最接近的东西类似于 excel 中的 countif 公式,但我没有得到第一个/最后一个日期,只有多少id 在数据集中显示的次数

df.groupby(['id'])[['date']].count()

有人知道获得此结果的最佳方法是什么吗?

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    让我们试试groupbytransform

    df['latest_apparence'] = df.groupby('id')['date'].transform('max')
    df['first_apparence'] = df.groupby('id')['date'].transform('min')
    

    【讨论】:

    • 我喜欢变换函数。太棒了
    【解决方案2】:

    根据你想要的数据,你可以做

    
    dt = df.groupby('id')['date'].agg(['min','max']).rename(columns={'min':'first_date','max':'last_date'})
    
    print(dt)
    
    # or broadcasting as Beny suggested with 
    # AGG is aggregation of min and max
    # df.groupby('id')['date'].transform(AGG)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 2015-01-18
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多