gpt4 book ai didi

python-3.x - 数据透视表中每个级别的小计

转载 作者:行者123 更新时间:2023-12-01 22:05:20 25 4
gpt4 key购买 nike

我正在尝试创建一个数据透视表,除了总计之外,每个行级别之间还有一个小计。

我创建了我的 df。

import pandas as pd
df = pd.DataFrame(
np.array([['SOUTH AMERICA', 'BRAZIL', 'SP', 500],
['SOUTH AMERICA', 'BRAZIL', 'RJ', 200],
['SOUTH AMERICA', 'BRAZIL', 'MG', 150],
['SOUTH AMERICA', 'ARGENTINA', 'BA', 180],
['SOUTH AMERICA', 'ARGENTINA', 'CO', 300],
['EUROPE', 'SPAIN', 'MA', 400],
['EUROPE', 'SPAIN', 'BA', 110],
['EUROPE', 'FRANCE', 'PA', 320],
['EUROPE', 'FRANCE', 'CA', 100],
['EUROPE', 'FRANCE', 'LY', 80]], dtype=object),
columns=["CONTINENT", "COUNTRY","LOCATION","POPULATION"]
)

之后我创建了如下所示的数据透视表

table = pd.pivot_table(df, values=['POPULATION'], index=['CONTINENT', 'COUNTRY', 'LOCATION'], fill_value=0, aggfunc=np.sum, dropna=True)
table

enter image description here

要进行小计,我开始求和 CONTINENT 级别

tab_tots = table.groupby(level='CONTINENT').sum()
tab_tots.index = [tab_tots.index, ['Total'] * len(tab_tots)]

enter image description here

并与我的第一个数据透视表连接以获得小计。

pd.concat([table, tab_tots]).sort_index()

得到它: enter image description here

我怎样才能得到像第一个表那样按级别分隔的值?

我没有找到执行此操作的方法。

最佳答案

使用 margins=True,并且需要稍微更改您的 pivot indexcolumns

newdf=pd.pivot_table(df, index=['CONTINENT'],values=['POPULATION'], columns=[ 'COUNTRY', 'LOCATION'], aggfunc=np.sum, dropna=True,margins=True)
newdf.drop('All').stack([1,2])
Out[132]:
POPULATION
CONTINENT COUNTRY LOCATION
EUROPE All 1010.0
FRANCE CA 100.0
LY 80.0
PA 320.0
SPAIN BA 110.0
MA 400.0
SOUTH AMERICA ARGENTINA BA 180.0
CO 300.0
All 1330.0
BRAZIL MG 150.0
RJ 200.0
SP 500.0

关于python-3.x - 数据透视表中每个级别的小计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52283533/

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