Pandas:获取N个最大值并在没有元素时插入NaN值

Jam*_*ash 3 python pandas

我有以下数据框:

    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]})
Run Code Online (Sandbox Code Playgroud)
        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
Run Code Online (Sandbox Code Playgroud)

我想按'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
Run Code Online (Sandbox Code Playgroud)

首先,我尝试将nlargest方法应用于每个组,但是NaN当没有第三大元素时它不会返回。而且我不知道如何将一个权重列转换为三个

WeN*_*Ben 7

您可以使用rankthen创建列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
Run Code Online (Sandbox Code Playgroud)