gpt4 book ai didi

python - Pandas :按多列分组后创建单一大小和求和列

转载 作者:太空狗 更新时间:2023-10-30 02:27:41 25 4
gpt4 key购买 nike

我有一个数据框,我在其中对 3 列进行分组并汇总数字列的总和和大小。运行代码后

df = pd.DataFrame.groupby(['year','cntry', 'state']).agg(['size','sum'])

我得到如下内容:

Image of datafram

现在我想从主列中拆分我的尺寸子列并仅创建单个尺寸列,但希望将总和列保留在主列标题下。我尝试了不同的方法但没有成功。这些是我尝试过但无法为我工作的方法:

How to count number of rows in a group in pandas group by object?

Converting a Pandas GroupBy object to DataFrame

如果有人能帮助我,我将不胜感激。

问候,

最佳答案

设置

d1 = pd.DataFrame(dict(
year=np.random.choice((2014, 2015, 2016), 100),
cntry=['United States' for _ in range(100)],
State=np.random.choice(states, 100),
Col1=np.random.randint(0, 20, 100),
Col2=np.random.randint(0, 20, 100),
Col3=np.random.randint(0, 20, 100),
))

df = d1.groupby(['year', 'cntry', 'State']).agg(['size', 'sum'])
df

enter image description here


回答
最简单的方法是在 groupby

之后只运行 size
d1.groupby(['year', 'cntry', 'State']).size()

year cntry State
2014 United States California 10
Florida 9
Massachusetts 8
Minnesota 5
2015 United States California 9
Florida 7
Massachusetts 4
Minnesota 11
2016 United States California 8
Florida 8
Massachusetts 11
Minnesota 10
dtype: int64

使用计算的df

df.xs('size', axis=1, level=1)

enter image description here

如果每列的 size 不同,那将很有用。但是因为 ['Col1', 'Col2', 'Col3']size 列是相同的,我们可以这样做

df[('Col1', 'size')]

year cntry State
2014 United States California 10
Florida 9
Massachusetts 8
Minnesota 5
2015 United States California 9
Florida 7
Massachusetts 4
Minnesota 11
2016 United States California 8
Florida 8
Massachusetts 11
Minnesota 10
Name: (Col1, size), dtype: int64

组合 View 1

pd.concat([df[('Col1', 'size')].rename('size'),
df.xs('sum', axis=1, level=1)], axis=1)

enter image description here


组合 View 2

pd.concat([df[('Col1', 'size')].rename(('', 'size')),
df.xs('sum', axis=1, level=1, drop_level=False)], axis=1)

enter image description here

关于python - Pandas :按多列分组后创建单一大小和求和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39794016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com