我对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的列名 有没有办法做到这一点?
答案 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