我有以下dataframe:
import pandas as pd
df = pd.DataFrame({'id': [2967, 5335, 13950, 6141, 6169],
'Player': ['Cedric Hunter', 'Maurice Baker',
'Ratko Varda', 'Ryan Bowen', 'Adrian Caldwell'],
'Year': [1991, 2004, 2001, 2009, 1997],
'Age': [27, 25, 22, 34, 31],
'Tm': ['CHH', 'VAN', 'TOT', 'OKC', 'DAL'],
'G': [6, 7, 60, 52, 81]})
df.set_index('Player', inplace=True)
它显示:
Out[128]:
Age G Tm Year id
Player
Cedric Hunter 27 6 CHH 1991 2967
Maurice Baker 25 7 VAN 2004 5335
Ratko Varda 22 60 TOT 2001 13950
Ryan Bowen 34 52 OKC 2009 6141
Adrian Caldwell 31 81 DAL 1997 6169
我如何使用任意顺序按索引('Player')排序?例如,如下所示。
reorderlist = ['Maurice Baker',
'Adrian Caldwell',
'Ratko Varda',
'Ryan Bowen',
'Cedric Hunter']
5条答案
按热度按时间cqoc49vn1#
就
reindex
更新信息你有多个玩家同名
7kjnsjlb2#
从Pandas 1.1开始,DataFrame.sort_values有一个
key
参数,它接受一个可调用的参数来控制排序。因此,您可以使用以下方法:在使用
pd.Categorical
和我在评论中提出的column.map
替代方案之间可能存在一些实际差异。例如,请参阅这些警告。我把两者都展示出来是为了完整。我还没有测试它与当前公认的使用df.reindex
的解决方案在性能方面的比较。当您也使用MultiIndex
时,最好的方法可能会有所不同。p8ekf7hl3#
要在字符串列表上获得自定义排序顺序,请将其声明为分类并手动指定排序顺序:
这是因为pandas还不允许Categoricals作为索引:
df.set_index(keys=player_order, inplace=True)
TypeError: unhashable type: 'Categorical'
因此,您需要使用
df.sort_index(level=player_order)
进行手动自定义排序8dtrkrch4#
如果有多个列需要排序,根据我的经验,我使用
map
将string
值转换为number
。然后使用sort_values
:e3bfsja25#
为了在不包括空行的情况下以任意顺序排序,我在测试BENYS answer时发现
df.filter
可以工作。它会根据需要进行排序,忽略像df.reindex
这样缺少的键,但不会为没有数据的键包含空行。