我有一个数据框,按id分组。有很多组,每个组的行数不确定。所有组的前三行都不包含有用的数据。我想要将每个组的前三行“合并”成一行,如下所示:
在新的“合并”行中,“id”和“type”保持不变。 当聚合前三行时,“grp_idx”将重命名为“0”。 col_1将是前三行的总和。 col_2将是前三行的总和。 如果前三行的值都为0,则“collapsed”行中的“flag”为0。如果在前三行中任何一个为1,则“flag”为1。(由于标志仅在所有组的一个行中设置,因此简单的求和就足够了)
以下是数据框的示例:
处理完成后,我希望数据框的样子是这样的:
我不确定如何继续。我尝试尝试以下代码:
在新的“合并”行中,“id”和“type”保持不变。 当聚合前三行时,“grp_idx”将重命名为“0”。 col_1将是前三行的总和。 col_2将是前三行的总和。 如果前三行的值都为0,则“collapsed”行中的“flag”为0。如果在前三行中任何一个为1,则“flag”为1。(由于标志仅在所有组的一个行中设置,因此简单的求和就足够了)
以下是数据框的示例:
import pandas as pd
import numpy as np
df = pd.DataFrame.from_items([
('id', [283,283,283,283,283,283,283,756,756,756]),
('type', ['A','A','A','A','A','A','A','X','X','X']),
('grp_idx', [1,2,3,4,5,6,7,1,2,3]),
('col_1', [2,4,6,8,10,12,14,5,10,15]),
('col_2', [3,6,9,12,15,18,21,1,2,3]),
('flag', [0,0,0,0,0,0,1,0,0,1]),
]);
print(df)
id type grp_idx col_1 col_2 flag
0 283 A 1 2 3 0
1 283 A 2 4 6 0
2 283 A 3 6 9 0
3 283 A 4 8 12 0
4 283 A 5 10 15 0
5 283 A 6 12 18 0
6 283 A 7 14 21 1
7 756 X 1 5 1 0
8 756 X 2 10 2 0
9 756 X 3 15 3 1
处理完成后,我希望数据框的样子是这样的:
ID Type grp_idx col_1 col_2 flag
283 A 0 12 18 0
283 A 4 8 12 0
283 A 5 10 15 0
283 A 6 12 18 0
283 A 7 14 21 1
756 X 0 30 6 1
我不确定如何继续。我尝试尝试以下代码:
df.groupby('id').head(3).sum()
但这并不是我需要的。如果有帮助、建议或代码片段,将不胜感激。