gpt4 book ai didi

python - Pandas Dataframe 中的 MultiIndex Groupby

转载 作者:太空狗 更新时间:2023-10-29 22:00:48 26 4
gpt4 key购买 nike

我有一个数据集,其中包含按年份划分的国家和经济指标统计数据,组织方式如下:

Country  Metric           2011   2012   2013  2014
USA GDP 7 4 0 2
USA Pop. 2 3 0 3
GB GDP 8 7 0 7
GB Pop. 2 6 0 0
FR GDP 5 0 0 1
FR Pop. 1 1 0 5

我如何在 pandas 中使用 MultiIndex 创建一个数据框,该数据框仅按年份显示每个国家/地区的 GDP?

我试过:

df = data.groupby(['Country', 'Metric'])

但它没有正常工作。

最佳答案

在这种情况下,您实际上不需要 groupby。您也没有 MultiIndex。你可以这样制作:

import pandas
from io import StringIO

datastring = StringIO("""\
Country Metric 2011 2012 2013 2014
USA GDP 7 4 0 2
USA Pop. 2 3 0 3
GB GDP 8 7 0 7
GB Pop. 2 6 0 0
FR GDP 5 0 0 1
FR Pop. 1 1 0 5
""")
data = pandas.read_table(datastring, sep='\s\s+')
data.set_index(['Country', 'Metric'], inplace=True)

然后数据看起来像这样:

                2011  2012  2013  2014
Country Metric
USA GDP 7 4 0 2
Pop. 2 3 0 3
GB GDP 8 7 0 7
Pop. 2 6 0 0
FR GDP 5 0 0 1
Pop. 1 1 0 5

现在要获取 GDP,您可以通过 xs 方法获取数据框的横截面:

data.xs('GDP', level='Metric')

2011 2012 2013 2014
Country
USA 7 4 0 2
GB 8 7 0 7
FR 5 0 0 1

这非常简单,因为您的数据已经过旋转/未堆叠。如果他们不是并且看起来像这样:

data.columns.names = ['Year']
data = data.stack()
data

Country Metric Year
USA GDP 2011 7
2012 4
2013 0
2014 2
Pop. 2011 2
2012 3
2013 0
2014 3
GB GDP 2011 8
2012 7
2013 0
2014 7
Pop. 2011 2
2012 6
2013 0
2014 0
FR GDP 2011 5
2012 0
2013 0
2014 1
Pop. 2011 1
2012 1
2013 0
2014 5

然后您可以使用 groupby 来告诉您有关整个世界的一些信息:

data.groupby(level=['Metric', 'Year']).sum()
Metric Year
GDP 2011 20
2012 11
2013 0
2014 10
Pop. 2011 5
2012 10
2013 0
2014 8

或者变得很花哨:

data.groupby(level=['Metric', 'Year']).sum().unstack(level='Metric')
Metric GDP Pop.
Year
2011 20 5
2012 11 10
2013 0 0
2014 10 8

关于python - Pandas Dataframe 中的 MultiIndex Groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214985/

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