熊猫按对象分组的相等水平

时间:2018-07-24 20:59:14

标签: python-3.x pandas pandas-groupby

即使各组之间的水平值不相等,我也希望使每个组中的水平相等。下面是我要实现的示例:

df = pd.DataFrame({'A' : ['foo']*3 + ['bar']*4,
   ...:                    'B' : [0,1,2,0,1,2,3],
   ...:                    'C' : np.random.randn(7)})

现在,如果我按列AB进行分组,则输出将如下所示:

>> print(df.groupby(['A', 'B']).sum())
A   B          
bar 0 -1.452272
    1  0.331986
    2  0.764295
    3  1.863472
foo 0 -1.066971
    1 -0.411573
    2  0.158449

我要实现以下目标:

A   B          
bar 0 -1.452272
    1  0.331986
    2  0.764295
    3  1.863472
foo 0 -1.066971
    1 -0.411573
    2  0.158449
    3  0.000000  

我对此进行了很多搜索,但无法弄清楚。

2 个答案:

答案 0 :(得分:2)

在代码后添加unstackstack

df.groupby(['A', 'B']).sum().unstack(fill_value=0).stack()
Out[372]: 
              C
A   B          
bar 0 -0.243351
    1 -0.568541
    2  1.529810
    3 -0.327521
foo 0 -2.380512
    1  1.088617
    2 -0.125879
    3  0.000000

答案 1 :(得分:1)

另一种选择是使用pd.crosstabstack

pd.crosstab(df['A'], df['B'], df['C'], aggfunc='sum').stack(dropna=False).fillna(0)

输出:

A    B
bar  0    0.553563
     1    0.357182
     2   -0.294756
     3    1.176766
foo  0   -0.514786
     1    1.841072
     2    0.792337
     3    0.000000
dtype: float64