使用Python Pandas的pivot方法时如何保持原有顺序?
如何在pivot时保持date字段的原始顺序
这个问题我之前处理过,pandas的pivot方法默认会对生成的列(也就是这里的date)进行字典序排序,所以才会出现你看到的日期顺序混乱的情况。下面给你两种简单有效的解决办法:
方法一:将date转为有序分类(推荐)
在执行pivot之前,把date列转换成有序分类类型,指定分类的顺序为原数据中date的原始顺序,这样pivot时就会严格遵循这个顺序生成列:
import pandas as pd # 初始化你的DataFrame df = {'Region':['France','France','France','France'],'total':[1,2,3,4],'date':['12/30/19','12/31/19','01/01/20','01/02/20']} df=pd.DataFrame.from_dict(df) # 将date列转为有序分类,categories设为原数据的唯一date值(保持原始顺序) df['date'] = pd.Categorical(df['date'], categories=df['date'].unique(), ordered=True) # 执行pivot pandas_temp = df.pivot(index='Region', values='total', columns='date') print(pandas_temp)
输出结果会保留原始日期顺序:
date 12/30/19 12/31/19 01/01/20 01/02/20 Region France 1 2 3 4
方法二:pivot后重新排列列
如果不想修改原数据的date字段类型,可以在pivot完成后,用原始的date列表重新索引结果的列:
import pandas as pd # 初始化你的DataFrame df = {'Region':['France','France','France','France'],'total':[1,2,3,4],'date':['12/30/19','12/31/19','01/01/20','01/02/20']} df=pd.DataFrame.from_dict(df) # 先执行pivot pandas_temp = df.pivot(index='Region', values='total', columns='date') # 用原始date的顺序重新排列列 pandas_temp = pandas_temp[df['date'].unique()] print(pandas_temp)
这个方法同样能得到和原始顺序一致的结果。
为什么会出现顺序丢失?
因为你的date字段是字符串类型,pandas在执行pivot时,默认会对字符串类型的列名进行字典序排序,'01/01/20'的字典序比'12/30/19'小,所以会排在前面。而上面两种方法都是通过强制指定列的顺序来规避这个默认行为。
内容的提问来源于stack exchange,提问作者olivier dadoun
相关产品推荐
相关产品推荐

