如何在Pandas中基于其他行单元格值添加计数列?
高效实现Pandas分组日期累计计数
可以实现,而且针对百万级数据,以下是高效的解决方案:
步骤说明
核心思路是先聚合统计每个Aid下各日期的出现次数,再计算累计和,最后映射回原DataFrame,避免逐行遍历的低效操作。
代码实现
import pandas as pd # 1. 确保Date列为datetime类型(如果原始数据不是的话) df['Date'] = pd.to_datetime(df['Date']) # 2. 统计每个(Aid, Date)组合的出现次数 date_counts = df.groupby(['Aid', 'Date']).size().reset_index(name='daily_count') # 3. 按Aid分组,计算累计求和(即<=当前日期的总行数) date_counts['Counter'] = date_counts.groupby('Aid')['daily_count'].cumsum() # 4. 将累计计数合并回原DataFrame df = df.merge(date_counts[['Aid', 'Date', 'Counter']], on=['Aid', 'Date'], how='left')
结果验证
运行后得到的DataFrame与预期完全一致:
| Id | Date | Aid | Counter |
|---|---|---|---|
| 0 | 2022-01-01 | one | 2 |
| 1 | 2022-01-01 | two | 1 |
| 2 | 2022-01-05 | one | 4 |
| 3 | 2022-01-06 | three | 1 |
| 4 | 2022-01-02 | one | 3 |
| 5 | 2022-01-01 | one | 2 |
效率说明
该方案的时间复杂度为O(n log n)(主要来自groupby的排序操作),远优于逐行比较的O(n²),完全适配百万级数据的处理需求。
内容的提问来源于stack exchange,提问作者Claudiu Stoica
相关产品推荐
相关产品推荐

