Python pandas - DataFrame groupby和重新构建

时间:2017-06-05 01:57:44

标签: python pandas

我对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(['用户','日'])。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 个答案:

答案 0 :(得分:3)

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

['痛い']

或者您只能重置第二级索引,因此您不需要在数据透视功能中指定索引列。

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

答案 1 :(得分:2)

使用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