我有以下数据框:
df = pd.DataFrame({'Farmer': ['John', 'Nick', 'Jane', 'Jane', 'John', 'Jane', 'John', 'Nick'],
'Animal': ['Cow', 'Sheep', 'Dolphin', 'Sheep', 'Horse', 'Dinosaur', 'Pig', 'Horse'],
'Weight': [200, 50 , 90 , 56, 180, 160, 150, 175]})
Farmer Animal Weight
0 John Cow 200
1 Nick Sheep 50
2 Jane Dolphin 90
3 Jane Sheep 56
4 John Horse 180
5 Jane Dinosaur 160
6 John Pig 150
7 Nick Horse 175
我想按 'Farmer'
列对数据框进行分组,然后将每个农民的 3 只最大动物的权重作为 3 列。
Farmer top1_animal_weight top2_animal_weight top3_animal_weight
0 John 200 180 150
1 Nick 175 50 NaN
2 Jane 160 90 56
首先,我尝试将 nlargest
方法应用于每个组,但是当没有第三大元素时它不会返回 NaN
。而且我也不知道如何将一个权重列转换为三个
最佳答案
您可以使用 rank
然后创建列 pivot
out = df.assign(Rank=df.groupby('Farmer')['Weight'].rank(ascending=False)).pivot(index='Farmer', columns='Rank',values='Weight')
Out[202]:
Rank 1.0 2.0 3.0
Farmer
Jane 160.0 90.0 56.0
John 200.0 180.0 150.0
Nick 175.0 50.0 NaN
关于python - Pandas:获取 N 个最大值并在没有元素时插入 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63904994/