我有这样的数据
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完成此操作,但是我不能在month标题下进行汇总。
我想走得更远,将产品与每个月相除,以找出每个月的利用率,例如:
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
答案 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