通过数据帧重新排序pandas group

时间:2016-08-05 00:23:14

标签: python pandas dataframe

我在pandas中有以下groupby数据框

Crop            Region   
maize_1         Temperate    30.0
                Tropical     46.0
maize_2         Tropical     77.5
                Temperate    13.5
soybean_1       Temperate    18.5
                Tropical     35.0

如何对其进行排序,以便在“地区”中进行排序。专栏,温带先于热带?

- 编辑:预期答案是

Crop            Region   
maize_1         Temperate    30.0
                Tropical     46.0
maize_2         Temperate    13.5
                Tropical     77.5
soybean_1       Temperate    18.5
                Tropical     35.0

2 个答案:

答案 0 :(得分:2)

设置

idx = pd.MultiIndex.from_tuples([('maize_1', 'Temperate'), ('maize_1', 'Tropical'),
                                 ('maize_2', 'Tropical'), ('maize_2', 'Temperate'),
                                 ('soybean_1', 'Temperate'), ('soybean_1', 'Tropical')],
                               names=['Crop', 'Region'])
s = pd.Series([30., 46., 77.5, 13.5, 18.5, 34.], idx)

s

Crop       Region   
maize_1    Temperate    30.0
           Tropical     46.0
maize_2    Tropical     77.5
           Temperate    13.5
soybean_1  Temperate    18.5
           Tropical     34.0
dtype: float64

解决方案

您希望按'Region'排序的IIUC并单独留下'Crop'

s.unstack().sort_index(1).stack()

Crop       Region   
maize_1    Temperate    30.0
           Tropical     46.0
maize_2    Temperate    13.5
           Tropical     77.5
soybean_1  Temperate    18.5
           Tropical     34.0
dtype: float64

您也可以按原样对索引进行排序,但也会对'Crop'进行排序。你的'Crop'已经完成了。但如果他们不这样做,这个解决方案就会保留下来。

答案 1 :(得分:0)

结帐sortleveldocs)或sort_indexdocs)。

df.sortlevel(level=[0, 1])

df.sort_index(level=[0, 1])

两个输出

Crop       Region   
maize_1    Temperate      30
           Tropical     46.0
maize_2    Temperate    13.5
           Tropical     77.5
soybean_1  Temperate    18.5
           Tropical     35.0