多级熊猫数据框中的总和列

Posted

技术标签:

【中文标题】多级熊猫数据框中的总和列【英文标题】:Sum column in multi-level pandas dataframe 【发布时间】:2018-04-25 11:32:32 【问题描述】:

我一直在研究堆栈溢出问题来解决这个问题,但我还没有找到解决方案。

我有一个数据框df,看起来像这样:

            value
pod         22          72          79          86         87          88   
time_stamp                                          
2016-10-03  10.160000   0.000000    0.000000    32.004001   5.334000    11.176000   
2016-10-10  0.000000    0.000000    0.000000    2.032000    0.000000    0.000000    
2016-10-17  16.002001   0.000000    8.636000    21.336001   1.778000    6.604000    
2016-10-24  2.032000    6.604000    71.628004   19.050001   0.508000    2.540000    
2016-10-31  3.556000    21.590000   0.000000    0.000000    2.032000    2.794000    
2016-11-07  3.302000    10.160000   0.762000    0.254000    1.270000    2.540000    
2016-11-14  27.686001   44.704001   22.606001   1.524000    26.670001   42.164001   
2016-11-21  68.072001   56.896002   14.732000   8.128000    23.114001   63.500002   

df.head(5).to_dict() 时的输出如下所示:

('value', 22): Timestamp('2016-10-03 00:00:00'): 10.159999966599999,
Timestamp('2016-10-10 00:00:00'): 0.0,
Timestamp('2016-10-17 00:00:00'): 16.0020005107,
Timestamp('2016-10-24 00:00:00'): 2.0320000648500001, 
Timestamp('2016-10-31 00:00:00'): 3.5560001134900006,
('value', 72): Timestamp('2016-10-03 00:00:00'): 0.0,
Timestamp('2016-10-10 00:00:00'): 0.0,
Timestamp('2016-10-17 00:00:00'): 0.0,
Timestamp('2016-10-24 00:00:00'): 6.6040000915499997,
Timestamp('2016-10-31 00:00:00'): 21.589999973800001,
('value', 79): Timestamp('2016-10-03 00:00:00'): 0.0,
Timestamp('2016-10-10 00:00:00'): 0.0,
Timestamp('2016-10-17 00:00:00'): 8.6360000968000001,
Timestamp('2016-10-24 00:00:00'): 71.628004074100005,
Timestamp('2016-10-31 00:00:00'): 0.0,

我想按列分组并对所有值求和。我被卡住了,因为这似乎是一个多级索引。

当我这样做s = df.sum(axis=1, level=[1]); s 时,它只会删除第一行:value。如何将列相加?

输出可能只是一个简单的数据框,它对 value 列求和,因此它可能类似于:

pod    22    72    79...
2016   100   120   110...
2017   80    90    72...

【问题讨论】:

df.sum(axis=1, level='pod') 我没有收到任何错误消息,但它不是 pod 列的总和。 @JAG2024 如果你给我这个将非常有帮助:df.head(5).to_dict() 并将其发布在你的问题中。谢谢。 这很有帮助,但是您希望您的输出是什么样的? 只是一个简单的数据框,其中包含所有 time_stamps 的每个 pod 的总和值。问题再次更新。 【参考方案1】:

您似乎需要沿 0th 轴的sum

df

                value                   
                   22      72         79
2016-10-03  10.160000   0.000   0.000000
2016-10-10   0.000000   0.000   0.000000
2016-10-17  16.002001   0.000   8.636000
2016-10-24   2.032000   6.604  71.628004
2016-10-31   3.556000  21.590   0.000000

df.sum(axis=0).to_frame().T

       value                   
          22      72         79
0  31.750001  28.194  80.264004

如果您想按年份进行分组操作,请在index.year 上致电groupby

df.groupby(df.index.year).sum()

          value                   
             22      72         79
2016  31.750001  28.194  80.264004

【讨论】:

这太棒了!尽管我刚刚意识到我还有另一件事要添加..最好在时间戳中按年份分组,然后按年份汇总。我会更新问题。 @JAG2024 更新答案。 是的,很抱歉追溯添加到问题中。非常感谢@cᴏʟᴅsᴘᴇᴇᴅ。 @Wen 可能会更糟......可能根本没有数据:p 哈哈,原来如此

以上是关于多级熊猫数据框中的总和列的主要内容,如果未能解决你的问题,请参考以下文章

将数据解析/反透视到熊猫数据框中的列中

如何从熊猫数据框中的时间戳列中删除时区

如何获取熊猫数据框中的行,列中具有最大值并保留原始索引?

熊猫数据框中的列的总和

将列中的所有值复制到熊猫数据框中的新列

如果特定列中的值不是熊猫数据框中的整数,则删除行