gpt4 book ai didi

python - 根据分组后每组中最后一个值的内容对列进行求和和计数

转载 作者:行者123 更新时间:2023-11-30 21:54:14 24 4
gpt4 key购买 nike

我有一个数据框如下

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”,然后sumcount列“val”中的行,但是应仅对包含与每组中“type”列的最后一个值相同的“type”的行进行求和。

例如,组的最后一行具有“类型”M,因此仅对组中具有“类型”M 的行进行求和和计数。因此,值 0,1 和 3 需要相加,计数为 3。

上述 df 的预期输出如下。输出中的“类型”列不是强制性的,如果需要更多时间才能获得它,可以将其省略。我在这里展示它只是为了清楚地说明我想要实现的目标。

id     val  count   type
aa 4 3 M
bbb 9 4 T
cccccc 1 3 C

最佳答案

使用GroupBy.transform使用 last 进行过滤,然后通过命名聚合进行聚合,适用于 pandas 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

另一个解决方案 Series.mapDataFrame.drop_duplicates 创建的系列和 DataFrame.set_index :

s = df.drop_duplicates('id', keep='last').set_index('id')['type']
df = (df[df['type'].eq(df['id'].map(s))]
.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

关于python - 根据分组后每组中最后一个值的内容对列进行求和和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59388451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com