Я не получаю другой порядок, когда я запускаю код несколько раз.Однако, если вы столкнулись с этой проблемой, вы можете просто назвать желаемый порядок после вашего agg
.Например, если вы хотите заказать v2
, v3
, v1
, сделайте:
df.groupby('id',sort=False).agg({'v1': ['count', 'sum'],
'v2': 'mean',
'v3': 'sum'})[['v2','v3','v1']]
v2 v3 v1
mean sum count sum
id
a 6.5 6 2 3
b 4.0 24 3 12
Или если вы просто хотите заказать тот же порядок, что и в исходном кадре данных:
df.groupby('id',as_index=False).agg({'v1': ['count', 'sum'],
'v2': 'mean',
'v3': 'sum'})[df.columns]
id v1 v2 v3
count sum mean sum
0 a 2 3 6.5 6
1 b 3 12 4.0 24
но в целом, комментарий @ Allolz имеет смысл IMO, используя sort_index(1)
:
df.groupby('id').agg({'v1': ['count', 'sum'],
'v2': 'mean',
'v3': 'sum'}).sort_index(1)