Pandas DataFrame中ID的历史True标记累计计数实现求助
解决方案:按ID分组计算累计True计数
嘿,这个问题的核心其实是按ID分组后做累计求和,你之前可能没用到分组操作,所以结果没达到预期。我一步步给你讲清楚怎么实现:
首先,先还原你的DataFrame:
import pandas as pd df = pd.DataFrame({ 'date': ['Apr1', 'Apr2', 'May1', 'May1', 'May2'], 'ID': [1, 2, 1, 1, 1], 'flag': [True, True, True, False, True] })
关键步骤:分组后累计求和
你需要先按ID分组,然后对flag列做累计求和——因为pandas会自动把True识别为1,False识别为0,所以cumsum()会帮你统计到当前行为止,该ID的flag为True的总次数,不管当前行的flag是啥。
代码如下:
# 可选但推荐:把date转为日期类型,确保排序逻辑正确 df['date'] = pd.to_datetime(df['date'], format='%b%d') # 核心操作:按ID分组,计算累计True数量 df['count'] = df.groupby('ID')['flag'].cumsum()
验证结果
运行后你会得到完全符合预期的结果:
| date | ID | flag | count |
|---|---|---|---|
| 2023-04-01 | 1 | True | 1 |
| 2023-04-02 | 2 | True | 1 |
| 2023-05-01 | 1 | True | 2 |
| 2023-05-01 | 1 | False | 2 |
| 2023-05-02 | 1 | True | 3 |
为什么你之前的尝试没成功?
大概率是没用到groupby('ID'),直接全局做了cumsum(),这样会把所有ID的True数量混在一起统计,而不是每个ID单独计算。加上分组后,每个ID的累计计数就会独立计算啦。
内容的提问来源于stack exchange,提问作者yang
相关产品推荐
相关产品推荐

