python - 为两列(一个多列)的最高行值排序df,但保持多列基本顺序
问题描述
我想按这两个子列之一的最高行值对我的 df(图1)主列(每个主列由 2 个子列组成)进行排序。我要对其进行排序的行是“Ball Possession”。我只知道如何为这一行排序,但只对子列直接排序(图2)。但我想保持主列的顺序。图3显示了解决方案(“photoshoped”)的外观。
[The Basis Dataframe i want to sort][1]
[Sort by subcolumns but not maincolumns][2]
[photoshopped solution][3]
解决方案
所以开始,我的df5
样子是这样的:
>>> df5
Ball Possession Result Team
cat type
cat0 0 38 0 PAOK
2 62 1 Chelsea
cat1 0 32 0 PAOK
2 68 1 Chelsea
cat2 0 76 4 Chelsea
2 24 1 Cardiff
cat3 0 78 4 Chelsea
2 22 1 Cardiff
cat4 0 76 2 Chelsea
2 24 0 Bournemouth
cat5 0 70 2 Chelsea
2 30 0 Bournemouth
cat6 0 21 1 Newcastle
2 79 2 Chelsea
我不确定您的数据框是否在之后.T
。如果需要,您可以切换。无论如何,首先您需要通过 Ball Possession 获得正确的游戏顺序:
df6 = df5.reset_index().groupby( 'cat' ).apply( lambda df: df.nlargest( 1, 'Ball Possession' ) )
nlargest 正在为每个 cat0、cat1、cat2 选择更大的 Ball Possession 值。
df6
好像:
>>> df6
cat type Ball Possession Result Team
cat
cat0 1 cat0 2 62 1 Chelsea
cat1 3 cat1 2 68 1 Chelsea
cat2 4 cat2 0 76 4 Chelsea
cat3 6 cat3 0 78 4 Chelsea
cat4 8 cat4 0 76 2 Chelsea
cat5 10 cat5 0 70 2 Chelsea
cat6 13 cat6 2 79 2 Chelsea
然后结束
order = df6.sort_values( 'Ball Possession', ascending=False )['cat'].values
order
就这样
>>> order
array(['cat6', 'cat3', 'cat2', 'cat4', 'cat5', 'cat1', 'cat0'], dtype=object)
然后在原始数据上使用该排序,在级别上排序:
final = df5.reindex( order, level='cat' ).T
这让你
cat cat6 cat3 cat2 cat4 cat5 cat1 cat0
type 0 2 0 2 0 2 0 2 0 2 0 2 0 2
Ball Possession 21 79 78 22 76 24 76 24 70 30 32 68 38 62
Result 1 2 4 1 4 1 2 0 2 0 0 1 0 1
Team Newcastle Chelsea Chelsea Cardiff Chelsea Cardiff Chelsea Bournemouth Chelsea Bournemouth PAOK Chelsea PAOK Chelsea
希望能帮助到你!
推荐阅读
- json - Pyspark - 从具有最小值和最大值范围的数组中获取值
- javascript - 从 React fetch 调用组件方法
- java - 按文件名对文件路径数组进行排序
- r - R: tr(), th() 和 thead() - 它们属于什么包?
- angular - 使用表单组循环遍历数据对象数组Angular
- css - 两个项目之间的 CSS 覆盖不同?
- web-scraping - 如何使用网络抓取从实时表中获取数据?
- php - 如何在php中检索文本作为可点击链接?
- coordinates - 有没有办法将地球位置地心转换为某个特定位置的切线坐标?
- java - 如何测试有其他测试的登录页面?