【发布时间】:2020-08-08 04:49:36
【问题描述】:
我有以下分层数据的数据格式。可以有多个单层和可变深度的行。我试图得到一个结果,在 col_2 中我们看到实例的所有低级的总和。
使用简单的 groupby 不起作用,因为它不了解层次结构。我尝试将 col_1 拆分为多个列,分别命名为 level-1 到 level-6(深度),因此 groupby level-1 到 level-6,但尽管数据帧是多索引,但结果仍然不正确。
分离前代码:df.groupby(["col_1"], as_index=False).sum()
分离后的代码:df.groupby(["level-1","level-2","level-3","level-4","level-5","level-6"], as_index=False).sum()
任何帮助将不胜感激!
感谢@Yo_Chris 到目前为止更新:
import pandas as pd
# sample data
df = pd.DataFrame({'Col1': ['PUU', 'PUU;UT', 'PUU;UT', 'PUU;UT;AHU', 'PUU;UT;AHU;CSP', 'PUU;AS', 'PUU;PREV', 'PUU;TECHNOLOGY', 'PUU;TECHNOLOGY', 'PUU;TECHNOLOGY;SPEC'],
'Col2': [1000,1000,50,500,250,100,1000,300,500,900]})
# groupby, sum and invert
s = df.groupby('Col1')['Col2'].sum()[::-1]
# groupby, cumsum and invert
s.groupby(s.index.str[0]).cumsum()[::-1])```
# this results in the following:
Col1
PUU 5600
PUU;AS 4600
PUU;PREV 4500
PUU;TECHNOLOGY 3500
PUU;TECHNOLOGY;SPEC 2700
PUU;UT 1800
PUU;UT;AHU 750
PUU;UT;AHU;CSP 250
Name: Col2, dtype: int64
而我们想要的是:
PUU 5600
PUU;AS 100
PUU;PREV 1000
PUU;TECHNOLOGY 1700
PUU;TECHNOLOGY;SPEC 900
PUU;UT 1800
PUU;UT;AHU 750
PUU;UT;AHU;CSP 250
【问题讨论】:
-
为什么
a;b在您的预期输出 1800 而不是 1750 中?为什么g;h900 而不是800? -
因为有 2 个实例 a;b = 1000 + 50 ,加上 a;b;c 和 a;b;c;d 500+250 = 1800。类似地,g = g 的 2 个实例+ g;h = 300+500+900 = 1700 因为这里的 h 是 g 的子代。
-
知道了,我只是拿差价不加。
标签: python-3.x pandas pandas-groupby hierarchical-data multi-index