我有以下内容DataFrame
两组动物以及它们每天吃多少食物,
df = pd.DataFrame({'animals': ['cat', 'cat', 'dog', 'dog', 'rat',
'cat', 'rat', 'rat', 'dog', 'cat'],
'food': [1, 2, 2, 5, 3, 1, 4, 0, 6, 5]},
index=pd.MultiIndex.from_product([['group1'] + ['group2'],
list(range(5))])
).rename_axis(['groups', 'day'])
df
animals food
groups day
group1 0 cat 1
1 cat 2
2 dog 2
3 dog 5
4 rat 3
group2 0 cat 1
1 rat 4
2 rat 0
3 dog 6
4 cat 5
我可以“映射”/将其转换为一个新列,以查看每只动物每天应该给予多少食物daily_meal
.
df['daily_meal'] = df.groupby(['animals', 'groups']).transform('mean')
df
animals food daily_meal
groups day
group1 0 cat 1 1.5
1 cat 2 1.5
2 dog 2 3.5
3 dog 5 3.5
4 rat 3 3.0
group2 0 cat 1 3.0
1 rat 4 2.0
2 rat 0 2.0
3 dog 6 6.0
4 cat 5 3.0
我现在希望知道 daily_meal 在每个组中的排名,并将其“映射”/转换为一个名为的新列group_rank
。我怎样才能做到这一点?
e.g.
animals food daily_meal group_rank
groups day
group1 0 cat 1 1.5 1
1 cat 2 1.5 1
2 dog 2 3.5 3
3 dog 5 3.5 3
4 rat 3 3.0 2
group2 0 cat 1 3.0 2
1 rat 4 2.0 1
2 rat 0 2.0 1
3 dog 6 6.0 3
4 cat 5 3.0 2