多级熊猫数据框中的总和列
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 哈哈,原来如此以上是关于多级熊猫数据框中的总和列的主要内容,如果未能解决你的问题,请参考以下文章