将月份列转换为行并聚合其下的其他列
Posted
技术标签:
【中文标题】将月份列转换为行并聚合其下的其他列【英文标题】:Convert month column into row and aggregate other columns under it 【发布时间】:2019-03-27 20:34:39 【问题描述】:我有这样的数据
user product month
A 1011 2
B 2011 2
B 2034 3
C 2078 4
D 1098 1
A 9087 3
A 5017 4
D 1872 1
A 1011 4
等等
我想汇总这些数据,以便将月份列转换为行,因为它们成为标题,并且我可以在每个用户下汇总具有唯一值的“产品”以及访问他们的月份。所以输出应该是这样的
user product 1 2 3 4 5 6 7 8 9 10 11 12
A 3 0 1 1 2 0 0 0 0 0 0 0 0
B 2 0 1 1 0 0 0 0 0 0 0 0 0
C 1 0 0 0 1 0 0 0 0 0 0 0 0
D 2 2 0 0 0 0 0 0 0 0 0 0 0
我想我可以使用 Pivot 来完成这项工作,但我无法在月份标题下进行汇总。
我想先一步,将产品与每个月分开,求出每个月的利用率,例如:
user product 1 2 3 4 5 6 7 8 9 10 11 12
A 3 0 0.33 0.33 0.66 0 0 0 0 0 0 0 0
B 2 0 0.50 0.50 0 0 0 0 0 0 0 0 0
C 1 0 0 0 1 0 0 0 0 0 0 0 0
D 2 1 0 0 0 0 0 0 0 0 0 0 0
【问题讨论】:
【参考方案1】:使用groupby
+ nunqiue
获取前两列,然后我们使用get_dummies
获取其他列
s1=df.groupby('user').product.nunique()
s2=df.set_index('user').month.astype(str).str.get_dummies().sum(level=0)
pd.concat([s1,s2.div(s1,axis=0)],1)
Out[121]:
product 1 2 3 4
user
A 3 0.0 0.333333 0.333333 0.666667
B 2 0.0 0.500000 0.500000 0.000000
C 1 0.0 0.000000 0.000000 1.000000
D 2 1.0 0.000000 0.000000 0.000000
【讨论】:
嗯,先生,你真棒! :)以上是关于将月份列转换为行并聚合其下的其他列的主要内容,如果未能解决你的问题,请参考以下文章