python - 在第一个 pandas python 上排序时保持第二级多索引完整

标签 python python-3.x pandas pandas-groupby

我使用以下方法对第一级索引进行了排序:Custom sort order function for 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

而不是(最后两行反转)

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

最佳答案

我认为你需要稳定的排序algo - 合并排序:

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

关于python - 在第一个 pandas python 上排序时保持第二级多索引完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56036466/

相关文章:

python - 从二进制数据创建一个 gtk.gdk.Pixbuf

Heroku 上的 Python - 发送给后台 worker

python - 比较训练集和有效集之间的 pd.Series 范围

python - 如何在python中导入自定义模块

python - Pandas pivot_table 包含空身份

python - 如何在views.py中添加从urls.py中删除url

python - 是否可以在没有任何 python 库的情况下从 xlsx 文件中读取信息?

java - 如何使用java/python从xml结构中获取匹配xpath的DOM结构

python - 设置复制警告和隐藏链接

python - Pandas 箱线图中共享轴的不同 ylim