我正在尝试使用熊猫做一个分组,并应用排序。如下所示: 到目前为止,我已经创建了各个帧来获取小计。不知道如何继续之后,得到正确的排序没有诉诸黑客
示例数据帧来自上一个问题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
您需要在排序中包括前3列
使用排序索引(级别=0)
从数据帧
g
继续按'windspeed'
升序排序的示例:基本上,您需要像以前一样执行groupby,然后在除最后一个级别之外的所有级别上再次执行groupby,并按所需列应用排序
相关问题 更多 >
编程相关推荐