【问题标题】: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 的总和值。问题再次更新。

标签: python pandas dataframe group-by sum


【解决方案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
  • 哈哈,原来如此
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2021-03-21
  • 1970-01-01
  • 2022-12-08
  • 2022-01-13
  • 2019-08-01
  • 2017-05-31
相关资源
最近更新 更多