将Pandas groupby group转换为列

Hon*_*ath 5 python dataframe pandas

我正在尝试通过两个独立的组类型A_Bucket和B_Bucket对Pandas数据帧进行分组,并将每个A_Bucket组转换为一列.我得到这样的团体:

grouped = my_new_df.groupby(['A_Bucket','B_Bucket'])
Run Code Online (Sandbox Code Playgroud)

我希望A_Bucket组在列中,B_Bucket组作为索引.'A'有大约20个值,B有大约20个值,所以总共有大约400个组.

当我打印分组及其类型时,我得到:

type of grouped2 = <class 'pandas.core.groupby.DataFrameGroupBy'>
A_Bucket  B_Bucket
0.100      100.0            5.418450
           120.0           18.061367
0.125      80.0             3.100920
           100.0           14.137063
           120.0           30.744823
           140.0           38.669950
           160.0           48.303129
           180.0           74.576333
           200.0          125.119950
0.150      60.0             0.003200
           80.0             2.274807
           100.0            5.350074
           120.0           23.272970
           140.0           40.131780
           160.0           47.036912
           180.0           72.438978
           200.0          117.365480
Run Code Online (Sandbox Code Playgroud)

所以A_Bucket组0.100只有2个值,但0.125有7.我想要一个这样的数据帧:

        0.1     0.125      0.15
80      NaN     3.10092    2.274807
100     5.41845 14.137063  5.350074
120     18.0613 30.744823  23.27297
140     NaN     38.66995   40.13178
160     NaN     48.303129  47.036912
180     NaN     74.576333  72.438978
200     NaN     125.11995  NaN
Run Code Online (Sandbox Code Playgroud)

我看到了这个问题: Pandas groupby导致多列

但我不理解语法,并没有像我需要的那样将第一组安排到列中.我还希望这适用于多个输出列.

我该怎么做呢?

Psi*_*dom 10

如果我理解正确,您正在尝试重塑数据框而不是按摘要分组,在这种情况下,您可以使用set_index()unstack():

df.set_index(["A_Bucket", "B_Bucket"]).unstack(level=0)

#              Value
# A_Bucket     0.100     0.125       0.150
# B_Bucket          
#     60.0       NaN       NaN    0.003200
#     80.0       NaN  3.100920    2.274807
#    100.0  5.418450 14.137063    5.350074
#    120.0 18.061367 30.744823   23.272970
#    140.0       NaN 38.669950   40.131780
#    160.0       NaN 48.303129   47.036912
#    180.0       NaN 74.576333   72.438978
#    200.0       NaN 125.119950 117.365480
Run Code Online (Sandbox Code Playgroud)

如果您确实在分组后完成了摘要,您仍然可以这样做 df.groupby(['A_Bucket', 'B_Bucket']).mean().unstack(level=0)