python - 将 Pandas groupby group 转换为列

标签 python pandas dataframe

我正在尝试按两个单独的组类型 A_​​Bucket 和 B_Bucket 对 Pandas 数据框进行分组,并将每个 A_Bucket 组转换为一列。我得到这样的组:

grouped = my_new_df.groupby(['A_Bucket','B_Bucket'])

我希望 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

所以 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

我看到了这个问题: Pandas groupby result into multiple columns

但我不明白语法,而且它没有按照我的需要将第一组排列成列。我还希望它适用于多个输出列。

我该怎么做?

最佳答案

如果我对您的理解正确,您是在尝试 reshape 数据框而不是按摘要分组,在这种情况下,您可以使用 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

如果你确实做了分组后的总结,你仍然可以做df.groupby(['A_Bucket', 'B_Bucket']).mean().unstack(level=0)

关于python - 将 Pandas groupby group 转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323002/

相关文章:

python - 使用字典交叉数据框列 "contains List"

python - 数据框:条件替换

python - 如何在 pandas 中调用函数

python - 如何将索引转换为列表?

python - Django Rest-auth 身份验证仅适用于 super 用户。在其他情况下,我得到 - 无法使用提供的凭据登录

python - 将 Flask 类扩展为主 App

python - 如何保持从 Pandas DataFrame 到字典的行顺序

python - 在 Python 中使用 Pandas Groupby 按系列中的标签分组

python - 如何在 Pandas DataFrame 中对经纬度配对进行分组?

python从字符串中删除特定的非ASCII字符