【问题标题】: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

【问题讨论】:

    标签: python pandas logic pivot-table pandas-groupby


    【解决方案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
    

    【讨论】:

    • 嗯,先生,你真棒! :)
    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多