我有一个像这样的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]