ChatGPT解决这个技术问题 Extra ChatGPT

如何从一列中对熊猫数据框进行排序

我有一个这样的数据框:

print(df)

        0          1     2
0   354.7      April   4.0
1    55.4     August   8.0
2   176.5   December  12.0
3    95.5   February   2.0
4    85.6    January   1.0
5     152       July   7.0
6   238.7       June   6.0
7   104.8      March   3.0
8   283.5        May   5.0
9   278.8   November  11.0
10  249.6    October  10.0
11  212.7  September   9.0

如您所见,月份不是按日历顺序排列的。所以我创建了第二列来获取每个月(1-12)对应的月份数。从那里,我如何根据日历月的顺序对这个数据框进行排序?


d
drevicko

使用 sort_values 按特定列的值对 df 进行排序:

In [18]:
df.sort_values('2')

Out[18]:
        0          1     2
4    85.6    January   1.0
3    95.5   February   2.0
7   104.8      March   3.0
0   354.7      April   4.0
8   283.5        May   5.0
6   238.7       June   6.0
5   152.0       July   7.0
1    55.4     August   8.0
11  212.7  September   9.0
10  249.6    October  10.0
9   278.8   November  11.0
2   176.5   December  12.0

如果要按两列排序,请将列标签列表传递给 sort_values,列标签根据排序优先级排序。如果您使用 df.sort_values(['2', '0']),则结果将按列 2 然后按列 0 排序。诚然,这对于本示例来说实际上没有意义,因为 df['2'] 中的每个值都是唯一的。


以上解决方案对我不起作用。它应该根据下面的答案进行更改。
@NafeesAhmad OP 希望结果按升序排列,这与其他答案不同
v
vinzee

我尝试了上面的解决方案,但没有取得结果,所以我找到了一个适合我的不同解决方案。 ascending=False 是按降序 对数据帧进行排序,默认为 True。我正在使用 python 3.6.6 和 pandas 0.23.4 版本。

final_df = df.sort_values(by=['2'], ascending=False)

您可以在 pandas 文档 here 中查看更多详细信息。


M
M Z

使用列名对我有用。

sorted_df = df.sort_values(by=['Column_name'], ascending=True)

a
alireza yazdandoost

就像另一个解决方案一样:

您可以对字符串数据(月份名称)进行分类并按如下方式排序,而不是创建第二列:

df.rename(columns={1:'month'},inplace=True)
df['month'] = pd.Categorical(df['month'],categories=['December','November','October','September','August','July','June','May','April','March','February','January'],ordered=True)
df = df.sort_values('month',ascending=False)

它将按照您在创建 Categorical 对象时指定的 month name 为您提供排序数据。


G
Gonçalo Peres

Panda 的 sort_values 完成了这项工作。

如果打算保留相同的变量名,请不要忘记 inplace=True(这会就地执行操作)

df.sort_values(by=['2'], inplace=True)

不妨将更改(排序)分配给一个变量,该变量可能具有相同的名称,例如 df

df = df.sort_values(by=['2'])

忘记上述步骤可能会导致(如this user)无法获得预期的结果。

注意,如果要按降序排列,则需要通过ascending=False,例如

df = df.sort_values(by=['2'], ascending=False)

H
Hari_pb

只是在数据上添加更多操作。假设我们有一个数据框 df,我们可以做几个操作来获得想要的输出

ID         cost      tax    label
1       216590      1600    test      
2       523213      1800    test 
3          250      1500    experiment

(df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)

sorted 的标签输出作为 dataframe

    index   label
0   test        2
1   experiment  1

s
suzanne chen

这对我有用

df.sort_values(by='Column_name', inplace=True, ascending=False)

m
mojtaba rezaei

您可能需要在排序后重置索引:

df = df.sort_values('2')
df = df.reset_index(drop=True)

M
M Z

这是根据熊猫文档的 sort_values 模板。

DataFrame.sort_values(by, axis=0,
                          ascending=True,
                          inplace=False,
                          kind='quicksort',
                          na_position='last',
                          ignore_index=False, key=None)[source]

在这种情况下,它将是这样的。

df.sort_values(by=['2'])

API 参考 pandas.DataFrame.sort_values


S
Suraj Rao

只需添加更多见解

df=raw_df['2'].sort_values() # will sort only one column (i.e 2)

但 ,

df =raw_df.sort_values(by=["2"] , ascending = False)  # this  will sort the whole df in decending order on the basis of the column "2"

如果 ['2'] 正在工作,则意味着 2 是 char ,如果 [2] 正在工作,则 2 是 int 。这是唯一的区别。
4
41 72 6c

这个对我有用:

df=df.sort_values(by=[2])

然而:

df=df.sort_values(by=['2']) 

不管用。


S
Suraj Rao

示例:假设您有一个值为 1 和 0 的列,并且您想分离并只使用一个值,那么:

// furniture is one of the columns in the csv file.
 

allrooms = data.groupby('furniture')['furniture'].agg('count')
allrooms


myrooms1 = pan.DataFrame(allrooms, columns = ['furniture'], index = [1])

myrooms2 = pan.DataFrame(allrooms, columns = ['furniture'], index = [0])

print(myrooms1);print(myrooms2)

图像是呈现代码的一种非常糟糕的方式。而是将其作为文本发布,这对每个人来说都更容易
尝试通过发布代码本身来保持调试友好。 idownvotedbecau.se/imageofcode