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

标签 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]})
        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/

相关文章:

python - 即使填充了大部分数据也无法插入数据帧

python - 如何禁用python日志 `URL being requested` `Refreshing access_token`

python - 在某些条件下从数据框中删除重复项

python - 如何对取列表列平均值的 pandas Dataframe 执行 groupby 操作?

pandas - Geopandas 绘图作为子图

python - 操作系统重启、关机、休眠、 sleep 、唤醒(Windows Python)

python - 在嵌套列表python中查找所有出现的字符串及其索引

python - 保存可编辑 wx.ListCtrl 的编辑 - wxPython

python - 将 Dataframe 从每月重采样到每天

python-3.x - Python 中的大型 XML 文件解析