如何为Pandas DataFrame中的月份按倒序标记M1、M2序列标签
实现方法
要给最新的月份标记为M1,次新的标记为M2,以此类推,可以通过以下步骤实现:
- 基于日期降序排名:利用
rank()函数对date列按降序排序,最新的日期会获得排名1,次新的为2,以此类推。使用method='dense'可确保同一月份的所有日期获得相同排名(若存在同月多条数据的情况)。 - 生成标签:将排名结果转为整数后拼接前缀
M,得到最终的tag列。
完整代码
import pandas as pd # 创建原始DataFrame df = pd.DataFrame({ 'c':[0,1,1,2,2,2], 'date':pd.to_datetime(['2016-01-01','2016-02-01','2016-03-01','2016-04-01','2016-05-01','2016-06-05']) }) # 生成tag列 df['tag'] = 'M' + df['date'].rank(ascending=False, method='dense').astype(int).astype(str) # 查看结果 print(df)
输出结果
c date tag 0 0 2016-01-01 M6 1 1 2016-02-01 M5 2 1 2016-03-01 M4 3 2 2016-04-01 M3 4 2 2016-05-01 M2 5 2 2016-06-05 M1
补充说明
如果数据中存在同一月份的多条记录(比如两个2016-06-XX的日期),method='dense'会让它们的排名相同,最终都标记为M1,符合“同一月份视为同一批次”的需求。若不需要该逻辑,可将method改为'first',此时同月份的不同日期会按出现顺序获得连续排名。
内容的提问来源于stack exchange,提问作者M_S_N
相关产品推荐
相关产品推荐

