首页 文章

Python pandas - DataFrame groupby和重新构建

提问于
浏览
1

我在pandas中有一个groupby()的问题

如果我有一个DataFrame "df" 喜欢

user  day  click
0   U1    Mon  15
1   U2    Mon  7 
2   U1    Wed  15 
3   U3    Tue  21
4   U2    Tue  15
5   U2    Tue  10

当我使用 df.groupby(['user', 'day']).sum()
这将是

click  
user  day
U1    Mon   15
      Tue   NaN
      Wed   15
U2    Mon   7
      Tue   25
      Wed   NaN
U3    Mon   NaN
      Tue   21
      Wed   NaN

我怎样才能获得这样的DataFrame

day    Mon   Tue   Wed
user
U1     15    NaN   15
U2     7     25    NaN
U3     NaN   21    NaN

这意味着将一列转换为DataFrame的列名 .
有没有办法做到这一点?

2 回答

  • 2

    使用包含日期作为列的数据透视功能并填充点击次数 .

    df.groupby(['user', 'day']).sum().reset_index()\
      .pivot(index='user',columns='day',values='click')
    Out[388]: 
    day    Mon   Tue   Wed
    user                  
    U1    15.0   NaN  15.0
    U2     7.0  25.0   NaN
    U3     NaN  21.0   NaN
    

    或者您只能重置第二级索引,因此您无需在pivot函数中指定索引列 .

    df.groupby(['user', 'day']).sum().reset_index(level=1)\
    .pivot(columns='day',values='click')
    
  • 3

    另一种使用unstack()的方法:

    df=df.groupby(['user', 'day']).sum().unstack('day') #unstack
    df.columns = df.columns.droplevel() # drop first level column name
    df
    

    输出:

    day  Mon  Tue  Wed
    user            
    U1   15.0 NaN  15.0
    U2   7.0  25.0 NaN
    U3   NaN  21.0 NaN
    

相关问题