根据字符串值列对 pandas 数据帧行进行排序

Posted

技术标签:

【中文标题】根据字符串值列对 pandas 数据帧行进行排序【英文标题】:Sort pandas dataframe rows according to a string value column 【发布时间】:2020-05-19 02:15:41 【问题描述】:

我有以下数据框:

        month       price
0       April  102.478015
1      August   94.868053
2    December   97.278205
3    February  100.114510
4     January   99.419109
5        July   93.402928
6        June   96.114224
7       March  101.297762
8         May  102.905340
9    November   97.952169
10    October   95.606478
11  September   94.226803

我希望月份顺序一致(1 月在第一行,直到 12 月在第 12 行)。请问我该怎么办?

如果需要,可以复制这个dataframe然后执行

pd.read_clipboard(sep='\s\s+')

在你的 jupyter notebook 上拥有数据框

【问题讨论】:

【参考方案1】:

将值转换为有序的categoricals,因此可以使用DataFrame.sort_values

cats = ['January','February','March','April','May','June',
        'July','August','September','October','November','December']
df['month'] = pd.CategoricalIndex(df['month'], ordered=True, categories=cats)
#alternative
#df['month'] = pd.Categorical(df['month'], ordered=True, categories=cats)
df = df.sort_values('month')
print (df)
        month       price
4     January   99.419109
3    February  100.114510
7       March  101.297762
0       April  102.478015
8         May  102.905340
6        June   96.114224
5        July   93.402928
1      August   94.868053
11  September   94.226803
10    October   95.606478
9    November   97.952169
2    December   97.278205

【讨论】:

可以使用calendar.month_name生成cats变量 为什么是pd.CategoricalIndex 而不是pd.Categorical @jez? @yatu - 因为在一些较旧的 pandas 版本中 Categorical 失败,只能工作 CategoricalIndex

以上是关于根据字符串值列对 pandas 数据帧行进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Pandas pivot_table,按列对值进行排序

使用可变列对Pandas数据帧进行排序

快速搜索 Pandas 数据框列

在遵循特定结构的同时按列对多索引进行排序

Pandas 按功能过滤数据帧行

如何根据基于其他列的列对数据框进行排序[重复]