当存在如下所示的DataFrame时:
import pandas as pd df = pd.DataFrame(1, index=[100, 29, 234, 1, 150], columns=['A'])
我如何在索引和列值的每个组合都保持不变的情况下按索引对这个 Dataframe 进行排序?
oyxsuwqo1#
Dataframe 有一个sort_index方法,默认返回一个副本。传递inplace=True以就地操作。
sort_index
inplace=True
import pandas as pd df = pd.DataFrame([1, 2, 3, 4, 5], index=[100, 29, 234, 1, 150], columns=['A']) df.sort_index(inplace=True) print(df.to_string())
给我:
A 1 4 29 2 100 1 150 5 234 3
mcvgt66p2#
稍微更紧凑:
df = pd.DataFrame([1, 2, 3, 4, 5], index=[100, 29, 234, 1, 150], columns=['A']) df = df.sort_index() print(df)
注:
sort
inplace
t9eec4r03#
如果DataFrame索引的名称为,则也可以使用sort_values()按名称排序。例如,如果索引的名称为lvl_0,则可以按此名称排序。如果 Dataframe 是从groupby或pivot_table操作获得的,则这种特殊情况很常见。
sort_values()
lvl_0
groupby
pivot_table
df = df.sort_values('lvl_0')
如果索引具有名称,您甚至可以同时按**索引和列值进行排序。例如,下面的代码同时按索引和列A值进行排序:
A
df = df.sort_values(['lvl_0', 'A'])
如果有MultiIndex Dataframe ,则可以使用level=参数按索引级别排序。例如,如果要按第二级降序排序,按第一级升序排序,则可以使用以下代码执行此操作。
level=
df = df.sort_index(level=[1, 0], ascending=[False, True])
如果索引有名字,同样,你可以调用sort_values(),例如,下面的代码按照索引'lvl_1'和'lvl_2'排序。
'lvl_1'
'lvl_2'
df = df.sort_values(['lvl_1', 'lvl_2'])
3条答案
按热度按时间oyxsuwqo1#
Dataframe 有一个
sort_index
方法,默认返回一个副本。传递inplace=True
以就地操作。给我:
mcvgt66p2#
稍微更紧凑:
注:
sort
已弃用,在此方案中已替换为sort_index
inplace
,因为它通常更难读取并防止链接。请参见此处答案中的解释:Pandas: peculiar performance drop for inplace rename after dropnat9eec4r03#
如果DataFrame索引的名称为,则也可以使用
sort_values()
按名称排序。例如,如果索引的名称为lvl_0
,则可以按此名称排序。如果 Dataframe 是从groupby
或pivot_table
操作获得的,则这种特殊情况很常见。如果索引具有名称,您甚至可以同时按**索引和列值进行排序。例如,下面的代码同时按索引和列
A
值进行排序:如果有MultiIndex Dataframe ,则可以使用
level=
参数按索引级别排序。例如,如果要按第二级降序排序,按第一级升序排序,则可以使用以下代码执行此操作。如果索引有名字,同样,你可以调用
sort_values()
,例如,下面的代码按照索引'lvl_1'
和'lvl_2'
排序。