Sac*_*aka 178 python sorting pandas
我有一个这样的数据框:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,月份不是日历顺序.所以我创建了第二列,以获得与每个月相对应的月份数(1-12).从那里,我如何根据日历月的顺序对此数据框进行排序?
EdC*_*ica 247
用于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
Run Code Online (Sandbox Code Playgroud)
如果要按两列排序sort_values,请将列标签列表传递给根据排序优先级排序的列标签.如果使用df.sort_values(['2', '0']),结果将按列2然后列排序0.当然,这对于这个例子来说并不合理,因为每个值df['2']都是唯一的.
Joe*_*iro 52
我尝试了上面的解决方案而且没有达到结果,所以我找到了一个适合我的不同解决方案.该升=假是订购数据框在递减顺序,默认为真.我使用的是python 3.6.6和pandas 0.23.4版本.
final_df = df.sort_values(by=['2'], ascending=False)
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看pandas文档中的更多详细信息.
ali*_*ost 19
就像另一种解决方案:
您可以对字符串数据(月份名称)进行分类并按如下方式排序,而不是创建第二列:
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)
Run Code Online (Sandbox Code Playgroud)
它将month name按照您在创建Categorical对象时指定的方式为您提供有序数据。
Nir*_*raj 18
使用列名对我有用。
sorted_df = df.sort_values(by=['Column_name'], ascending=True)
Run Code Online (Sandbox Code Playgroud)
小智 11
这对我有用
df.sort_values(by='Column_name', inplace=True, ascending=False)
Run Code Online (Sandbox Code Playgroud)
小智 9
您可能需要在排序后重置索引:
df = df.sort_values('2')
df = df.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)
小智 8
这是根据 pandas 文档的 sort_values 模板。
DataFrame.sort_values(by, axis=0,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
ignore_index=False, key=None)[source]
Run Code Online (Sandbox Code Playgroud)
在这种情况下就会是这样的。
df.sort_values(by=['2'])
API 参考pandas.DataFrame.sort_values
只是添加一些对数据的操作。假设我们有一个数据框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)
Run Code Online (Sandbox Code Playgroud)
将sorted标签输出作为dataframe
index label
0 test 2
1 experiment 1
Run Code Online (Sandbox Code Playgroud)
熊猫的sort_values工作。
如果打算保留相同的变量名,请不要忘记inplace=True(这将执行就地操作)
df.sort_values(by=['2'], inplace=True)
Run Code Online (Sandbox Code Playgroud)
不妨将更改(排序)分配给一个变量,该变量可能具有相同的名称,例如dfas
df = df.sort_values(by=['2'])
Run Code Online (Sandbox Code Playgroud)
忘记上述步骤可能会导致(作为该用户)无法获得预期的结果。
请注意,如果要降序,则需要通过ascending=False,例如
df = df.sort_values(by=['2'], ascending=False)
Run Code Online (Sandbox Code Playgroud)
小智 7
只是添加一些更多的见解
df=raw_df['2'].sort_values() # will sort only one column (i.e 2)
Run Code Online (Sandbox Code Playgroud)
但 ,
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"
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您想动态排序列但不按字母顺序排序。并且不想使用 pd.sort_values()。您可以尝试以下解决方案。
问题:按此顺序对列“col1”进行排序 ['A', 'C', 'D', 'B']
import pandas as pd
import numpy as np
## Sample DataFrame ##
df = pd.DataFrame({'col1': ['A', 'B', 'D', 'C', 'A']})
>>> df
col1
0 A
1 B
2 D
3 C
4 A
## Solution ##
conditions = []
values = []
for i,j in enumerate(['A','C','D','B']):
conditions.append((df['col1'] == j))
values.append(i)
df['col1_Num'] = np.select(conditions, values)
df.sort_values(by='col1_Num',inplace = True)
>>> df
col1 col1_Num
0 A 0
4 A 0
3 C 1
2 D 2
1 B 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
235971 次 |
| 最近记录: |