在第一个熊猫python上排序时,保持第二级的多索引完整

查波

我已经使用以下方法第一级索引进行了排序groupby pandas python的自定义排序顺序函数

def my_func(group):
    return sum(group["B"]*group["C"])

idx=df.groupby('A').apply(my_func).reindex(df.index.get_level_values(0))
df.iloc[idx.argsort()]

问题是,第二级排序在对第一级进行排序后变得混乱。如何确保组内订单得到保留?

A   B C
1 0 1 8
  1 3 3
2 0 1 2
  1 2 2
3 0 1 3
  1 2 4

A   B C
2 0 1 2
  1 2 2
3 0 1 3
  1 2 4
1 0 1 8
  1 3 3

而不是(倒数2行)

A   B C
2 0 1 2
  1 2 2
3 0 1 3
  1 2 4
1 1 3 3
  0 1 8
耶斯列尔

我认为您需要稳定的排序算法- mergesort

idx=df.index.get_level_values(0).map(df.groupby('A').apply(my_func))
df = df.iloc[idx.argsort(kind='mergesort')]
print (df)
     B  C
A        
2 0  1  2
  1  2  2
3 0  1  3
  1  2  4
1 0  1  8
  1  3  3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据第一个排序数组的索引对第二个数组进行排序

如何将第二级索引添加到熊猫数据框

Java流flatMap,其中保留第一级和第二级对象

Java根据第一个数组的索引对第二个数组进行排序

Hibernate中的第一级和第二级缓存是什么?

SQL Server,在两列上排序,第一是asc排序,第二是基于第一个奇偶数的desc或desc

熊猫根据其他列向列多索引添加新的第二级列

Python Mulit-Index:更改索引名称的第二级

在第二级熊猫多索引中选择数据框的子集

如何基于多索引列第二级中的名称计算表达式

获取多索引数据框第二级的名称

多索引-为每个第一个索引获取第二个索引的最大值

汇总特定列中第二级索引的最后一行中的每个第一级索引

如何从每个第一级索引的最大第二级索引的单元格中选择值?

如何使第一行变成第二级MultiIndex

熊猫数据框中第二级多重索引的总和值

如何在第二级以下的多索引数据框中删除第一列,排除一些列

比较两个熊猫列,并返回与第二个元素匹配的第一个的索引

Python:当第一个数组排序时,如何使第二个数组的索引匹配第一个数组的索引?

如何强制将熊猫数据框的第二级添加到第一级?

如何强制第二级多重索引的值?

如何在Pandas DataFrame中将第二级索引更改为第二级列?

如何使菜单第二级的最后一个元素下拉?

如何下载种子内第一或第二级页面引用的pdf文件

熊猫将第一个多索引转换为行索引,将第二个多索引转换为列索引

如何根据第一个列表的索引重新排序第二个列表?

我想创建一个嵌套的日期时间字典,第一级键是年,第二级是月

如何从多索引数据框中获取第一个二级索引?

在第一级和第二级过滤具有多列索引的数据框