Pandas按多列分组计算累积和并保留level列的实现方法
pandas分组累积和保留其他列实现方案
列丢失的原因是你直接使用了groupby().cumsum()的返回结果作为输出——这个方法返回的是和原DataFrame索引一一对应的单列Series,仅包含累积和计算结果,自然不会携带level列。只要把计算得到的累积和作为新列追加回原DataFrame,就能保留所有原有字段。
实现代码
import pandas as pd # 双字段分组,计算upgrade_n的累积和,直接赋值为原df的新列 df["cumulative_sum"] = df.groupby(["player_profile", "category"])["upgrade_n"].cumsum() # 筛选目标列、调整输出顺序,按需把level转为整数格式 result = df[["player_profile", "category", "cumulative_sum", "level"]].reset_index(drop=True) result["level"] = result["level"].astype(int)
补充说明
- 只要
groupby操作前没有对原DataFrame做过滤、重设索引的操作,cumsum()返回的Series就会和原表每一行严格对齐,不会出现行错位的问题 - 你贴出的期望输出里
Standard Player分组第一行的level值为13,和原始数据中对应行的18.0存在出入,上述代码会完整保留原始数据的level值,如果需要对分组内的level做重排、重置,可以在分组计算前先按业务规则对DataFrame排序即可。
内容的提问来源于stack exchange,提问作者ianux22
相关产品推荐
相关产品推荐

