如何在Pandas DataFrame中快速生成随客户变更递增的Line ID列
解决方法
直接用Pandas的内置方法就能搞定,不用写for循环,代码简洁还高效:
import pandas as pd # 构造示例数据 data = {'Customer': ['Pepsi', 'Pepsi', 'Lego', "Mcdonald's", "Mcdonald's"]} df = pd.DataFrame(data) # 生成Line ID列 df['Line ID'] = df['Customer'].ne(df['Customer'].shift()).cumsum()
运行后得到的结果完全符合需求:
| Customer | Line ID |
|---|---|
| Pepsi | 1 |
| Pepsi | 1 |
| Lego | 2 |
| Mcdonald's | 3 |
| Mcdonald's | 3 |
代码解释
df['Customer'].shift():把Customer列的所有行向下偏移一位,第一行变为NaNne():判断当前行的Customer和偏移后的行是否不相等,返回布尔值(True对应1,False对应0)cumsum():对上述布尔值对应的1和0做累加,每次遇到不同的Customer时就自动加1,正好生成连续的Line ID
这种方法比for循环高效太多,尤其是处理大数据集时,完全利用了Pandas的向量化运算优势,不用逐行遍历。
内容的提问来源于stack exchange,提问作者PiCubed
相关产品推荐
相关产品推荐

