Python中如何为DataFrame内客户的每次出现进行连续编号?
解决DataFrame中客户出现次数连续编号的问题
嘿,这个需求其实用Pandas的分组计数功能就能轻松搞定!咱们直接看具体操作:
首先,先把你的示例数据转换成Pandas DataFrame:
import pandas as pd data = { 'Date': ['01/01/2021', '01/01/2021', '01/01/2021', '01/02/2021', '01/02/2021', '01/02/2021', '01/03/2021', '01/03/2021', '01/03/2021', '01/04/2021', '01/04/2021', '01/05/2021', '01/05/2021', '01/06/2021'], 'Customer': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'A'] } df = pd.DataFrame(data)
接下来是核心操作——按客户分组,对每组记录按日期排序后生成连续编号:
# 先把Date列转为日期类型,确保排序逻辑正确 df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y') # 按Customer分组,每组内按Date排序后用cumcount生成从1开始的连续编号 df['Appear'] = df.sort_values('Date').groupby('Customer').cumcount() + 1
给你拆解下这段代码的逻辑:
groupby('Customer'):把数据按客户拆分成独立的小组,每个小组只处理对应客户的记录sort_values('Date'):确保每个客户的记录是按日期从早到晚排列的,避免编号顺序混乱cumcount() + 1:cumcount()会给每个小组内的行从0开始计数,加1后就变成了从1开始的连续编号,正好对应客户的第几次出现
运行后,你的DataFrame就会得到完全符合预期的结果:
| Date | Customer | Appear |
|---|---|---|
| 2021-01-01 | A | 1 |
| 2021-01-01 | B | 1 |
| 2021-01-01 | C | 1 |
| 2021-02-01 | A | 2 |
| 2021-02-01 | B | 2 |
| 2021-02-01 | C | 2 |
| 2021-03-01 | A | 3 |
| 2021-03-01 | B | 3 |
| 2021-03-01 | C | 3 |
| 2021-04-01 | A | 4 |
| 2021-04-01 | B | 4 |
| 2021-05-01 | A | 5 |
| 2021-05-01 | B | 5 |
| 2021-06-01 | A | 6 |
不管客户是不是在所有日期都出现,每次出现都会按他自己的出现顺序生成连续编号,完美匹配你想要的效果~
内容的提问来源于stack exchange,提问作者haraujo
相关产品推荐
相关产品推荐

