首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按索引值对pandas数据框中的列进行排序

如何按索引值对pandas数据框中的列进行排序
EN

Stack Overflow用户
提问于 2018-10-30 21:50:56
回答 1查看 65关注 0票数 1

是否可以根据特定索引值对pandas df的列进行排序?

代码语言:javascript
运行
复制
price / time           load_1 load_2 load_3 load_4
price                    50,    68,    23,    12
2018-01-01 00:00:00      12,    65,    37,     8
2018-01-01 00:15:00      13,    54,   112,     6
2018-01-01 00:30:00      58,     12,   96,     4

(第一个索引是能源消耗的价格,而下面的几行代表能源的数量。列数未定义)

所以它基本上看起来像:

代码语言:javascript
运行
复制
price / time           load_2 load_1 load_3 load_4
price                    68,    50,    23,    12
2018-01-01 00:00:00      65,    12,    37,     8
2018-01-01 00:15:00      54,    13,   112,     6
2018-01-01 00:30:00      12,    58,    96,     4

按价格指数以升序或降序对列进行排序。

EN

回答 1

Stack Overflow用户

发布于 2018-10-30 21:55:03

如果索引名称为price,则将sort_valuesaxis=1一起使用

代码语言:javascript
运行
复制
print (df.columns)
Index(['load_1', 'load_2', 'load_3', 'load_4'], dtype='object')

df = df.sort_values('price', axis=1, ascending=False)
print (df)
                     load_2  load_1  load_3  load_4
price / time                                       
price                    68      50      23      12
2018-01-01 00:00:00      65      12      37       8
2018-01-01 00:15:00      54      13     112       6
2018-01-01 00:30:00      12      58      96       4

如果列中的MultiIndex使用DataFrame.sort_index

代码语言:javascript
运行
复制
print (df.columns)
MultiIndex(levels=[['load_1', 'load_2', 'load_3', 'load_4'], ['12', '23', '50', '68']],
           labels=[[0, 1, 2, 3], [2, 3, 1, 0]],
           names=['price / time', 'price'])

df = df.sort_index(axis=1, level=1, ascending=False)
print (df)
price / time        load_2 load_1 load_3 load_4
price                   68     50     23     12
2018-01-01 00:00:00     65     12     37      8
2018-01-01 00:15:00     54     13    112      6
2018-01-01 00:30:00     12     58     96      4

同样,这里应该是问题是有必要将第二级转换为整数:

代码语言:javascript
运行
复制
a = df.columns.get_level_values(0)
b = df.columns.get_level_values(1).astype(int)

df.columns = pd.MultiIndex.from_arrays([a,b], names=df.columns.names)

print (df.columns)
MultiIndex(levels=[['load_1', 'load_2', 'load_3', 'load_4'], [12, 23, 50, 68]],
           labels=[[0, 1, 2, 3], [2, 3, 1, 0]],
           names=['price / time', 'price'])

df = df.sort_index(axis=1, level=1, ascending=False)
print (df)
price / time        load_2 load_1 load_3 load_4
price                   68     50     23     12
2018-01-01 00:00:00     65     12     37      8
2018-01-01 00:15:00     54     13    112      6
2018-01-01 00:30:00     12     58     96      4
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53065843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档