我正在尝试按两个单独的组类型 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/