在实际数据集中有不同类型的组级别可用,我们将需要不同类型的逐组报告。 (注意:明智的报告并不简单,因此请仔细阅读以下示例)
需求示例
当我们需要报告第4级组报告时,则需要对数据字段求和,直到第4级之前的最后一个值。报告编号可以是“组”列中给出的任何编号。 (请参阅“期望的输出以获取更多清晰度”
对于其余部分,请进行以下处理:
购买日期,信息1和信息2 :在组级别提供提取日期
数据:总和
实际数据库:
Group purchase_date Info1 Info2 data
2 03/23/2019 A B 57
3 03/24/2019 A B 48
4 03/25/2019 A B 40
1 03/26/2019 Q B 60
2 03/27/2019 Q B 42
3 03/28/2019 Q B 33
4 03/29/2019 Q B 36
1 03/30/2019 R B 54
2 03/31/2019 R B 57
3 04/01/2019 R B 53
4 04/02/2019 R B 56
1 04/03/2019 A B 48
2 04/04/2019 A B 40
3 04/05/2019 A B 45
4 04/06/2019 A B 60
1 04/07/2019 A B 38
2 04/08/2019 A B 58
按照上述要求对数据进行分组后的预期输出:
4th group level report:
Group purchase_date Info1 Info2 data
4 03/25/2019 A B 145
4 03/29/2019 Q B 171
4 04/02/2019 R B 220
4 04/06/2019 A B 193
4 04/08/2019 A B 96
2nd group level Report
Group purchase_date Info1 Info2 data
2 03/23/2019 A B 57
2 03/27/2019 Q B 190
2 03/31/2019 R B 180
2 04/04/2019 A B 197
2 04/08/2019 A B 201
我已经按功能对它进行了尝试,但无法启动。
有人可以帮助我获得所需的输出吗?
谢谢。
答案 0 :(得分:1)
使用以下功能fileB.txt
,其中参数f(z, l)
是必需的级别,而l
是您的DataFrame:
z
输出:
def f(z, l):
x = (z['Group'] == l) | (z.index == z.index[-1])
cs = z['data'].cumsum()
dx = cs - cs.where(x, np.nan).ffill().shift(1).fillna(0)
return z[x].drop('data', 1).assign(Group=l).join(dx)
print(f(df, 2))
print(f(df, 4))
基本上,每次我们击中具有给定级别的记录或DataFrame中的最后一条记录时, Group purchase_date Info1 Info2 data
0 2 03/23/2019 A B 57.0
4 2 03/27/2019 Q B 190.0
8 2 03/31/2019 R B 180.0
12 2 04/04/2019 A B 197.0
16 2 04/08/2019 A B 201.0
Group purchase_date Info1 Info2 data
2 4 03/25/2019 A B 145.0
6 4 03/29/2019 Q B 171.0
10 4 04/02/2019 R B 220.0
14 4 04/06/2019 A B 193.0
16 4 04/08/2019 A B 96.0
都会重置累积和。
更新:使cumsum
中的最后一行始终等于前一行+ 4天:
purchase_date