如何为DataFrame添加识别并计数重复索引值的列?
解决DataFrame中逐行统计重复索引出现次数的问题
嘿,我懂你要的是什么!你之前用groupby.size()得到的是每个ix的总出现次数,但你真正需要的是每个ix组内逐行递增的计数,对吧?这时候pandas的cumcount()方法就正好派上用场啦~
步骤1:构造示例数据
先把你提供的示例DataFrame构造出来,方便复现:
import pandas as pd data = { 'ix': [1, 2, 2, 2, 3, 4, 5, 5], 'value': [12, 14, 15, 12, 10, 9, 14, 21] } df = pd.DataFrame(data)
步骤2:添加逐行累计计数列
使用groupby('ix')按ix分组后,调用cumcount()方法——这个方法会对每个分组内的行从0开始依次计数,我们只需要给结果加1,就能得到从1开始的序号:
df['dupes'] = df.groupby('ix').cumcount() + 1
最终结果
运行上述代码后,你就能得到期望的输出:
| ix | value | dupes | |
|---|---|---|---|
| 0 | 1 | 12 | 1 |
| 1 | 2 | 14 | 1 |
| 2 | 2 | 15 | 2 |
| 3 | 2 | 12 | 3 |
| 4 | 3 | 10 | 1 |
| 5 | 4 | 9 | 1 |
| 6 | 5 | 14 | 1 |
| 7 | 5 | 21 | 2 |
补充说明
cumcount()默认从0开始计数,所以加1后就和你想要的“第1次出现、第2次出现”的逻辑完全匹配- 这个方法比你之前尝试的
merge方式更简洁高效,不需要额外的合并操作
内容的提问来源于stack exchange,提问作者vestland
相关产品推荐
相关产品推荐

