对Pandas DataFrame中的单个行进行排序并返回列名



我有一个像这样的DataFrame(大得多)

|Date      | Team1 | Team2 | Team3 |
|----------|-------|-------|-------|
|1/20/2020 | 10.5  |  12   |  10.1 |
|1/27/2020 | 11.2  |  11.1 |  11.9 |

并且我想创建一个新列,其中包含每个日期的球队列表,按其记录的升序排列。

|Date      | Team1 | Team2 | Team3 | Rank                        |
|----------|-------|-------|-------|-----------------------------|
|1/20/2020 | 10.5  |  12   |  10.1 |  ['Team3', 'Team1', 'Team2']|
|1/27/2020 | 11.2  |  11.1 |  11.9 |  ['Team2', 'Team1', 'Team3']|

是否有一个有效的方法来实现这一点,而不是从每一行构造数组。排序,从排序索引等查找列名?

在teams列上使用np.argsort查找按行排序值的顺序,然后您可以使用该顺序重新排序列名以提供所需的内容:

# filter team columns
teams = df.filter(like='Team')
# argsort on teams columns by row and reorder columns with it
df['Rank'] = teams.columns[teams.values.argsort(1)].tolist()
df
Date  Team1  Team2  Team3                   Rank
0  1/20/2020   10.5   12.0   10.1  [Team3, Team1, Team2]
1  1/27/2020   11.2   11.1   11.9  [Team2, Team1, Team3]

最新更新