Pandas:获取 N 个最大值,如果没有元素则插入 NaN 值

我有以下数据框:


    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而且我也不知道如何将一个重量列转换为三个


小唯快跑啊
浏览 111回答 1
1回答

缥缈止盈

rank您可以使用then创建列pivotout = 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.0Farmer                     Jane    160.0   90.0   56.0John    200.0  180.0  150.0Nick    175.0   50.0    NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python