Pandas的sort_index是按数字排序的,而不是按字典排序的

wixjitnu  于 2023-05-05  发布在  其他
关注(0)|答案(4)|浏览(150)

我在对pandas Dataframe 进行排序时遇到了一些问题。
sort_index(axis=0)导致 Dataframe 将索引排序为1 10 11 12 13…等等
sort_index(axis=1)似乎对前几行起作用,然后它就完全无序了。
我简直无法理解正在发生的事情。我想要一个简单的数字排序我的索引,它似乎应该是标准设置的sort_index。

col17t5w

col17t5w1#

你有两种类型的索引,行索引(axis=0)或列索引(axis=1)
当你使用axis=1时,你只是按名称排列列。它不按值对每一行重新排序。检查sort_index(axis=1)后面的列名,您将了解

g6baxovj

g6baxovj2#

最后我用

df['indices']=df.index.values.tolist()

并按新列对整个数据框进行排序。它可以工作,但它很难看,我觉得我错过了sort_index()的一些非常基本的东西

mf98qq94

mf98qq943#

您可以将索引作为字符串类型。
我在使用groupby()函数后遇到了这个问题。我通过将后来成为索引的列更改为int()来解决这个问题:
df['col_name'] = df['col_name'].astype(int)

cczfrluj

cczfrluj4#

我遇到了一个类似的问题,我想“人类排序”,而不是严格和字母数字排序 Dataframe 索引和列标签。我的数据框中的索引是字符串。对于方法pandas.DataFrame.sort_index,以'11'结尾的索引在以'2'结尾的索引之前。我可以用natsort包和pandas.DataFrame.reindex方法解决它。

import pandas as pd
import natsort
# create a df
df = pd.DataFrame(0,
    index=['Scaf11', 'Scaf5', 'Scaf1', 'Scaf101'],
    columns=['Scaf11', 'Scaf5', 'Scaf1', 'Scaf101'])
# sort columns of the df
df = df.reindex(columns=natsort.humansorted(df.columns))
# sort indices of the df
df = df.reindex(index=natsort.humansorted(df.index))

导致这些 Dataframe :

# created dataframe
         Scaf11  Scaf5  Scaf1  Scaf101
Scaf11        0      0      0        0
Scaf5         0      0      0        0
Scaf1         0      0      0        0
Scaf101       0      0      0        0
# sorted dataframe (both for cols and indices)
         Scaf1  Scaf5  Scaf11  Scaf101
Scaf1        0      0       0        0
Scaf5        0      0       0        0
Scaf11       0      0       0        0
Scaf101      0      0       0        0

我建议您查看reindex文档。对索引重新排序或在 Dataframe 的精确位置添加新索引是有用的。例如,natsort对于自然排序字符串列表很有用。它可以在文档中提供更多的排序方法。

相关问题