
在最近的需求开发中,涉及到利用Pandas对某列数值进行分组排序,并新增字段用于记录排名情况(类似于Mysql当中的窗口函数ROW_NUMBER()功能),特此记录该篇文章帮助有需要的人,同时也方便日后的学习复盘
代码如下所示:
import pandas as pd
df = pd.DataFrame({'material':['C622203800-025', 'C622203800-025', 'C622203800-025', 'C622203800-025', 'C622203800-025','A112233','A112233','B456','B456'],
'product_number':['84-0086-03','85-0018-00','84-0089-05','83-0402-05','83-0433-05','AB','BC','CD','EF'],
'Q2_Demand':[912,1200,14226,48,0,123,456,250,15],
'Q2 Total Supply':[50020, 50020, 50020, 50020, 50020,1000,1000,200,200]})
df
问题: 新增'Q2_Priority'字段,针对'Q2_Demand'的数量多少,按material分组进行排名
# 新增Q2_Priority字段
df['Q2_Priority'] = df.groupby('material')['Q2_Demand'].rank(ascending=1,method='first').astype(int)
新增字段'Q2_Priority'后的df
从上图可看出按material分组进行排名,字段'Q2_Priority'的值毫无顺序规律,为此进行如下操作:
# 按字段'material','Q2_Priority'排序
df = df.sort_values(by = ['material','Q2_Priority'])
处理过后的df