Python 基于group by之后每组中最后一个值的内容的列的总和和计数
我有一个如下的数据帧Python 基于group by之后每组中最后一个值的内容的列的总和和计数,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个如下的数据帧 id val type aa 0 C aa 1 T aa 2 T aa 3 T aa 0 M aa 1 M aa 2 C aa 3 M bbb 0 C bbb 1 T bbb 2 T bbb 3 T bb
id val type
aa 0 C
aa 1 T
aa 2 T
aa 3 T
aa 0 M
aa 1 M
aa 2 C
aa 3 M
bbb 0 C
bbb 1 T
bbb 2 T
bbb 3 T
bbb 0 M
bbb 1 M
bbb 2 C
bbb 3 T
cccccc 0 C
cccccc 1 T
cccccc 2 T
cccccc 3 T
cccccc 0 M
cccccc 1 M
cccccc 0 C
cccccc 1 C
我想做一个groupby ID,然后对column val中的行进行求和和和计数,但是应该求和的行只是包含与每个组中column type的最后一个值相同类型的行
例如,组的最后一行的类型为M,因此只能对组中类型为M的行进行求和和和计数。因此,值0、1和3需要求和&计数为3
上述df的预期输出如下所示。输出中的列类型不是强制性的,如果需要更多时间才能获得,则可以将其忽略。我在这里展示它只是为了明确我想要实现的目标
id val count type
aa 4 3 M
bbb 9 4 T
cccccc 1 3 C
与last一起使用进行过滤,然后按命名聚合进行聚合,适用于0.25+:
df = (df[df['type'].eq(df.groupby('id')['type'].transform('last'))]
.groupby('id').agg(val=('val', 'sum'),
count=('val', 'size'),
type=('type','last')))
print (df)
val count type
id
aa 4 3 M
bbb 9 4 T
cccccc 1 3 C
另一个解决方案,其by Series由和创建:
与last一起使用进行过滤,然后按命名聚合进行聚合,适用于0.25+:
df = (df[df['type'].eq(df.groupby('id')['type'].transform('last'))]
.groupby('id').agg(val=('val', 'sum'),
count=('val', 'size'),
type=('type','last')))
print (df)
val count type
id
aa 4 3 M
bbb 9 4 T
cccccc 1 3 C
另一个解决方案,其by Series由和创建:
输出
id type val count
0 aa M 4 3
1 bbb T 9 4
2 cccccc C 1 3
输出
id type val count
0 aa M 4 3
1 bbb T 9 4
2 cccccc C 1 3
我想到了布尔索引,但没有想到转换“last”后的布尔索引。谢谢。我想到了布尔索引,但没有想到转换“last”后的布尔索引。谢谢