在Bandas中Groupby,pivot和concatenate,按日期划分?

时间:2016-08-02 07:18:25

标签: python pandas

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

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
  •   
  • 现在,连接数据透视数据
  •   

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

1 个答案:

答案 0 :(得分:0)

尝试:

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)

enter image description here