如何基于DataFrame列按指定记录数生成递增rank值?
问题:如何生成DataFrame中自定义间隔递增的"rank"列
需求:生成"rank"列,该列每N条记录递增1(N可自定义,示例中N=2),示例数据表如下:
| Months | rank |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 3 |
| 6 | 3 |
| 7 | 4 |
| 8 | 4 |
解决方案
以下是几种Python Pandas的实现方式:
方法1:整数除法实现固定间隔
假设间隔为interval=2,通过对索引做整数除法生成rank列:
import pandas as pd df = pd.DataFrame({'Months': range(1,9)}) interval = 2 df['rank'] = (df.index // interval) + 1
说明:索引从0开始,df.index // interval会让每interval条记录得到相同整数,加1后得到从1开始递增的rank值。
方法2:groupby+ngroup实现固定间隔
也可通过分组方式生成:
interval = 2 df['rank'] = df.groupby(df.index // interval).ngroup() + 1
方法3:处理动态间隔
如果间隔不是固定值(比如间隔列表为intervals=[2,3,1,2],即前2条rank=1、接下来3条rank=2,依此类推),可以用如下方式:
intervals = [2,3,1,2] rank_list = [] current_rank = 1 for cnt in intervals: rank_list.extend([current_rank]*cnt) current_rank += 1 df['rank'] = rank_list[:len(df)]
内容的提问来源于stack exchange,提问作者Michael Zeng
相关产品推荐
相关产品推荐

