在Pandas的单个groupby中添加多个列

xlpyo6sf  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(151)

Dataset image
请帮助,我有一个数据集,其中有列Country,Gas和Year从2019到1991。还附加了数据集的快照。我想回答一个问题,我想添加一个国家列的所有值明智?例如,对于阿富汗,2019年的值应该是56.4(加上28.79 + 6.23 + 16.37 + 5.01 = 56.4)。现在我希望它应该计算每年的结果。我已经使用下面的代码实现2019年的数据。

df.groupby(by='Country')['2019'].sum()

下面是该代码的输出:

Country
---------------------
Afghanistan     56.40
Albania         17.31
Algeria        558.67
Andorra          1.18
Angola         256.10
                ...  
Venezuela      588.72
Vietnam        868.40
Yemen           50.05
Zambia         182.08
Zimbabwe       235.06

我已经按国家/地区对数据进行了分组,并添加了2019年的列值,但如何在单行代码中添加其他年份的值呢?
请帮帮忙。
我可以做这里显示的代码,添加行和显示多个列像这样,但这将是乏味的任务,所以写每个列的名称。

df.groupby(by='Country')[['2019','2018','2017']].sum()
rqqzpn5f

rqqzpn5f1#

如果不指定列,它将对所有数值列求和。

df.groupby(by='Country').sum() 

                 2019   2020   ...
Country
Afghanistan     56.40   32.4   ...
Albania         17.31   12.5   ...
Algeria        558.67  241.5   ...
Andorra          1.18    1.5   ...
Angola         256.10   32.1   ...
                ...      ...   ...
Venezuela      588.72  247.3   ...
Vietnam        868.40  323.5   ...
Yemen           50.05   55.7   ...
Zambia         182.08   23.4   ...
Zimbabwe       235.06  199.4   ...

执行reset_index()以展平列

df.groupby(by='Country').sum().reset_index()

Country          2020   2019   ...
Afghanistan     56.40   32.4   ...
Albania         17.31   12.5   ...
Algeria        558.67  241.5   ...
Andorra          1.18    1.5   ...
Angola         256.10   32.1   ...
                ...      ...   ...
Venezuela      588.72  247.3   ...
Vietnam        868.40  323.5   ...
Yemen           50.05   55.7   ...
Zambia         182.08   23.4   ...
Zimbabwe       235.06  199.4   ...
ddarikpa

ddarikpa2#

您可以在 Dataframe 中选择列键,从列2019开始,直到最后一个列键,方法如下:

df.groupby(by='Country')[df.keys()[2:]].sum()

方法df.keys将返回列表中的所有 Dataframe 列键,然后您可以从2019键的索引(即2)开始对其进行切片,直到列键结束。
假设您要选取从20161992的数据行:

df.groupby(by='Country')[df.keys()[5:-1]].sum()

您只需要按照正确的索引顺序对列键列表进行切片。

相关问题