代码之家  ›  专栏  ›  技术社区  ›  KubiK888

如何用Python将一列的日期聚合为每人的日期列表?

  •  1
  • KubiK888  · 技术社区  · 4 年前

    从这个

    ID   DATE
    1    2012-03-04
    1    2013-04-15
    1    2019-01-09
    2    2013-04-09
    2    2016-01-01
    2    2018-05-09
    

    为了这个

    ID   DATE
    1    [2012-03-04, 2013-04-15, 2019-01-09]
    2    [2013-04-09, 2016-01-01, 2018-05-09]
    

    这是我的尝试

    df.sort_values(by=['ID', 'DATE'], ascending=True, inplace=True)
    df = df[['ID', 'DATE']]
    df_pivot = df.groupby('ID').aggregate(lambda tdf: tdf.unique().tolist())
    df_pivot = pd.DataFrame(df_pivot.to_records())
    

    问题是它会返回这样的结果

    ID   DATE
    1    [1375228800000000000, 1411948800000000000, 1484524800000000000]
    2    [1524528000000000000, 1529539200000000000, 1529542200000000000]
    

    3 回复  |  直到 4 年前
        1
  •  1
  •   jezrael    4 年前

    如果需要列表中的唯一值,请使用 DataFrame.drop_duplicates list 学生:

    df = (df.sort_values(by=['ID', 'DATE'], ascending=True)
            .drop_duplicates(['ID', 'DATE'])
            .groupby('ID')['DATE']
            .agg(list))
    

    df_pivot = df.groupby('ID')['DATE'].aggregate(lambda tdf: tdf.drop_duplicates().tolist())
    

    这是什么样的日期格式?

    If是本机datetime,也称为unix datetime,单位为纳秒。

        2
  •  2
  •   wwnde    4 年前

    df.groupby('ID')['DATE'].agg(list)
    
    Or
    
    df.groupby('ID')['DATE'].apply(lambda x: x.to_list())
    
        3
  •  1
  •   Anurag Dabas    4 年前

    简单使用 groupby() apply() 方法:

    result=df.groupby('ID')['DATE'].apply(list)
    

    或者

    result=df.groupby('ID')['DATE'].agg(list)
    

    现在如果你打印 result

    ID
    1    [ 2012-03-04,  2013-04-15,  2019-01-09]
    2    [ 2013-04-09,  2016-01-01,  2018-05-09]
    Name: DATE, dtype: object
    

    上面的代码给你 Series Dataframe 然后使用:

    result=df.groupby('ID')['DATE'].apply(list).reset_index()