首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas基于多列的aggfunc sum

Pandas基于多列的aggfunc sum
EN

Stack Overflow用户
提问于 2018-05-28 18:11:42
回答 1查看 3K关注 0票数 1

我试图通过透视表和使用aggfunc来对数据帧中多个列的数据求和。我的数据框给出了不同地区的排放数据。我不想对一些行求和,所以我选择了想要求和的行。但是,每列的输出是两行:

  • 一个名为True,给出我定义的行的总和(这是我想要的列)
  • 另一个名为False,给出我没有定义的其余行的总和(这一行我想删除/省略)

这些数据是多年的数字区域数据,所以我想要做的是添加一些区域的数据,以便获得更大区域的数据。年份以列的形式列出。

数据看起来像这样:

inp = [{'Scenario':'Baseline', 'Region':'CHINA', 'Variable':'Methane', 'Unit':'MtCO2eq', '1990':5,'1995':10,'2000':15},
   {'Scenario':'Baseline', 'Region':'INDIA', 'Variable':'Methane', 'Unit':'MtCO2eq', '1990':6,'1995':11,'2000':16},
   {'Scenario':'Baseline', 'Region':'INDONESIA', 'Variable':'Methane', 'Unit':'MtCO2eq', '1990':7,'1995':12,'2000':17},
   {'Scenario':'Baseline', 'Region':'KOREA', 'Variable':'Methane', 'Unit':'MtCO2eq', '1990':8,'1995':13,'2000':18},
   {'Scenario':'Baseline', 'Region':'JAPAN', 'Variable':'Methane', 'Unit':'MtCO2eq', '1990':9,'1995':14,'2000':19},
   {'Scenario':'Baseline', 'Region':'THAILAND', 'Variable':'Methane', 'Unit':'MtCO2eq', '1990':10,'1995':15,'2000':20},
   {'Scenario':'Baseline', 'Region':'RUSSIA', 'Variable':'Methane', 'Unit':'MtCO2eq', '1990':11,'1995':16,'2000':21}]
dt = pd.DataFrame(inp)

dt 
   1990  1995  2000     Region  Scenario     Unit Variable
0     5    10    15      CHINA  Baseline  MtCO2eq  Methane
1     6    11    16      INDIA  Baseline  MtCO2eq  Methane
2     7    12    17  INDONESIA  Baseline  MtCO2eq  Methane
3     8    13    18      KOREA  Baseline  MtCO2eq  Methane
4     9    14    19      JAPAN  Baseline  MtCO2eq  Methane
5    10    15    20   THAILAND  Baseline  MtCO2eq  Methane
6    11    16    21     RUSSIA  Baseline  MtCO2eq  Methane

我运行这段代码:

dt_test = dt.pivot_table(dt,index=['Scenario','Variable','Unit'],
                           columns=[(df['Region'] == 'CHINA')|
                                   (df['Region'] == 'INDIA')|
                                   (df['Region'] == 'INDONESIA')
                                   |(df['Region'] == 'KOREA')],
                           aggfunc=np.sum)

并将以下内容作为输出:

                           1990        1995        2000      
Region                    False True  False True  False True 
Scenario Variable Unit                                       
Baseline Methane  MtCO2eq    46    10    76    15   106    20

如果有人能帮我去掉这些年的假专栏,或者用另一种很好的方法来得到我想要的总数,那就太棒了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 18:13:40

使用xs

print (dt_test.xs(True, axis=1, level=1))
                           1990  1995  2000
Scenario Variable Unit                     
Baseline Methane  MtCO2eq    26    46    66

但更好的方法是先用isinboolean indexing过滤

df = df[df['Region'].isin(['CHINA','INDIA','INDONESIA','KOREA'])]

print (df)
   1990  1995  2000     Region  Scenario     Unit Variable
0     5    10    15      CHINA  Baseline  MtCO2eq  Methane
1     6    11    16      INDIA  Baseline  MtCO2eq  Methane
2     7    12    17  INDONESIA  Baseline  MtCO2eq  Methane
3     8    13    18      KOREA  Baseline  MtCO2eq  Methane

然后按组聚合sum

dt_test = df.groupby(['Scenario','Variable','Unit']).sum()
print (dt_test)
                           1990  1995  2000
Scenario Variable Unit                     
Baseline Methane  MtCO2eq    26    46    66
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50563994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档