python - 如何在不更改 Pandas 分组的情况下对数据框进行排序?

标签 python pandas pandas-groupby

我正在尝试使用 Pandas 进行分组并进行排序。像下面这样的东西: 1到目前为止,我已经创建了单独的框架来获取小计。不确定之后如何进行才能在不诉诸黑客的情况下正确完成排序。

示例数据框来自 this上一个问题。

df = pd.DataFrame({
'admin0': ['cntry1', 'cntry1', 'cntry1', 'cntry1', 'cntry1', 'cntry1', 'cntry2', 'cntry2', 'cntry2', 'cntry2', 'cntry2'], 
'admin1': ['state1', 'state1', 'state1', 'state2', 'state2', 'state2', 'state3', 'state3', 'state3', 'state3', 'state4'], 
'admin2': ['city1', 'city1', 'city2', 'city3', 'city4', 'city4', 'city5', 'city6', 'city6', 'city6', 'city7'], 
'windspeed': [60, 90, 60, 60, 60, 90, 60, 60, 90, 120, 60], 
'population': [700, 210, 100, 70, 180, 370, 890, 120, 420, 360, 740]
})
g1 = df.groupby(['admin0', 'admin1',  'admin2']).sum()
g2 = g1.groupby(level=[0, 1]).sum()
g2.index = pd.MultiIndex.from_arrays([g2.index.get_level_values(0), g2.index.get_level_values(1), len(g2.index)*['']])
g3 = g1.groupby(level=0).sum()
g3.index = pd.MultiIndex.from_arrays([g3.index.get_level_values(0), len(g3.index)*[''], len(g3.index)*['']])
g = pd.concat([g1, g2, g3])

g 现在的状态:

                         windspeed  population
admin0 admin1 admin2                       
cntry1 state1 city1         150         910
              city2          60         100
       state2 city3          60          70
              city4         150         550
cntry2 state3 city5          60         890
              city6         270         900
       state4 city7          60         740
cntry1 state1               210        1010
       state2               210         620
cntry2 state3               330        1790
       state4                60         740
cntry1                      420        1630
cntry2                      390        2530

我现在希望能够在不更改分组的情况下进行排序,如 gif 中所示。

按风速递增分组时的预期响应:

                      windspeed  population
admin0 admin1 admin2
cntry2                      390        2530
       state4                60         740
              city7          60         740
       state3               330        1790
              city5          60         890
              city6         270         900
cntry1                      420        1630
       state1               210        1010
              city2          60         100
              city1         150         910
       state2               210         620
              city3          60          70
              city4         150         550

最佳答案

使用 sort_index(level=0)

                      windspeed  population
admin0 admin1 admin2                       
cntry1                      420        1630
       state1               210        1010
              city1         150         910
              city2          60         100
       state2               210         620
              city3          60          70
              city4         150         550
cntry2                      390        2530
       state3               330        1790
              city5          60         890
              city6         270         900
       state4                60         740
              city7          60         740

关于python - 如何在不更改 Pandas 分组的情况下对数据框进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65208845/

相关文章:

python - 为什么全局关键字即使无法访问也不会被忽略? (Python)

Python3 askopenfilename错误

python - Pandas groupBy 与条件分组

python - Pandas groupby - 一组不同的值

python - Pandas value_counts() + 权重

python - 使用 Python/Pandas/Numpy 的几何级数(无循环并使用递归)

Python - Pandas - 从其他列数据创建 "first fail"列

python - Pandas :拆分数据框行并重新排列列值

pandas - 使用 seaborn 绘图时如何为色调参数指定多个变量?

python - 对列进行分组并连接多个列的唯一字符串值以创建单个列