基于多列的Pandas aggfunc sum

2024-09-30 12:11:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过旋转表并使用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

我运行这段代码:

^{pr2}$

并将其作为输出:

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

如果有人能帮我把这些年来的假专栏删掉,或者用另一种漂亮的方法得到我想要的总数,那将是惊人的。在


Tags: 数据falsetrue区域定义unitvariable命名
1条回答
网友
1楼 · 发布于 2024-09-30 12:11:59

使用^{}

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

但更好的方法是先按^{}^{}进行筛选:

^{pr2}$

然后按组汇总sum

dt_test = df.groupby(['Scenario','Variable','Unit']).sum()
print (dt_test)
                           1990  1995  2000
Scenario Variable Unit                     
Baseline Methane  MtCO2eq    26    46    66

相关问题 更多 >

    热门问题