【问题标题】:Groupby, pivot and concatenate in Pandas, breaking by date?Groupby,Pandas 中的枢轴和连接,按日期划分?
【发布时间】:2016-12-07 10:21:39
【问题描述】:

我有一个如下所示的数据框:

df = pd.DataFrame([
        [123, 'abc', '121'],
        [123, 'abc', '121'],
        [456, 'def', '121'],
        [123, 'abc', '122'],
        [123, 'abc', '122'],
        [456, 'def', '145'],
        [456, 'def', '145'],
        [456, 'def', '121'],
    ], columns=['userid', 'name', 'dt'])

来自this question,我已经成功转置了它。

因此,所需的 df 将是:

userid1_date1  name_1   name_2  ...   name_n
userid1_date2  name_1   name_2  ...   name_n
userid2        name_1   name_2  ...   name_n
userid3_date1  name_1   name_2  ...   name_n

但是,我想根据日期分隔行。比如用户123有两天的数据,那么每一天的api事件的行应该是分开的。

转换后我真的不需要userid,所以无论如何你都可以使用它。

我的计划是:

  • 将 df w.r.t 分组到 dt
  • 旋转所有组,使每个组看起来像这样:
    userid1_date1 name_1 name_2 ... name_n
  • 现在,连接透视数据

但是,我不知道如何在 pandas 中做到这一点!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试:

    def tweak(df):
        return df.reset_index().name
    
    df.set_index('userid').groupby(level=0).apply(tweak)
    

    演示

    df = pd.DataFrame([[1, 'a'], [1, 'c'], [1, 'c'], [1, 'd'], [1, 'e'],
                       [1, 'a'], [1, 'c'], [1, 'c'], [1, 'd'], [1, 'e'],
                       [2, 'a'], [2, 'a'], [2, 'c'], [2, 'd'], [2, 'e'],
                       [2, 'a'], [2, 'a'], [2, 'c'], [2, 'd'], [2, 'e'],
        ], columns=['userid', 'name'])
    
    def tweak(df):
        return df.reset_index().name
    
    df.set_index('userid').groupby(level=0).apply(tweak)
    

    【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多