熊猫合并python排序数据框

时间:2021-03-01 17:37:46

标签: python pandas dataframe sorting merge

Name    Sex Age Height  Weight
0   Alfred  M   14  69.0    112.5
1   Alice   F   13  56.5    84.0
2   Barbara F   13  65.3    98.0
3   Carol   F   14  62.8    102.5
4   Henry   M   14  63.5    102.5
5   James   M   12  57.3    83.0
6   Jane    F   12  59.8    84.5
7   Janet   F   15  62.5    112.5
8   Jeffrey M   13  62.5    84.0
9   John    M   12  59.0    99.5
10  Joyce   F   11  51.3    50.5
11  Judy    F   14  64.3    90.0
12  Louise  F   12  56.3    77.0
13  Mary    F   15  66.5    112.0
14  Philip  M   16  72.0    150.0
15  Robert  M   12  64.8    128.0
16  Ronald  M   15  67.0    133.0
17  Thomas  M   11  57.5    85.0
18  William M   15  66.5    112.0

我想交替输出性别列行

Name Sex Age Height Weight 
Alice F 13 56.5 84.0 
Alfred M 14 69.0 112.5 
Barbara F 13 65.3 98.0 
Henry M 14 63.5 102.5 
Carol F 14 62.8 102.5 
James M 12 57.3 83.0 
Jane F 12 59.8 84.5 
Jeffrey M 13 62.5 84.0 
Janet F 15 62.5 112.5 
John M 12 59.0 99.5 
Joyce F 11 51.3 50.5 
Philip M 16 72.0 150.0 
Judy F 14 64.3 90.0 
Robert M 12 64.8 128.0 
Louise F 12 56.3 77.0 
Ronald M 15 67.0 133.0 
Mary F 15 66.5 112.0 
Thomas M 11 57.5 85.0 

1 个答案:

答案 0 :(得分:0)

您可以使用 groupby().cumcount() 枚举组内的行,然后使用 sort_values

(df.assign(order=df.groupby(['Sex']).cumcount())
   .sort_values(['order','Sex'])
   .drop('order',axis=1)
)

输出:

       Name Sex  Age  Height  Weight
1     Alice   F   13    56.5    84.0
0    Alfred   M   14    69.0   112.5
2   Barbara   F   13    65.3    98.0
4     Henry   M   14    63.5   102.5
3     Carol   F   14    62.8   102.5
5     James   M   12    57.3    83.0
6      Jane   F   12    59.8    84.5
8   Jeffrey   M   13    62.5    84.0
7     Janet   F   15    62.5   112.5
9      John   M   12    59.0    99.5
10    Joyce   F   11    51.3    50.5
14   Philip   M   16    72.0   150.0
11     Judy   F   14    64.3    90.0
15   Robert   M   12    64.8   128.0
12   Louise   F   12    56.3    77.0
16   Ronald   M   15    67.0   133.0
13     Mary   F   15    66.5   112.0
17   Thomas   M   11    57.5    85.0
18  William   M   15    66.5   112.0