【问题标题】:How can i get the top 3 smallest and top 3 highest value for each row in pandas?如何获得熊猫每行的前 3 个最小值和前 3 个最大值?
【发布时间】:2021-07-06 15:39:24
【问题描述】:

我有一张如下表:

group    shopspend  clothspend  foodspend music spend

A          1              2        12       34
B          1              2        12       34
C          1              2        12       34
d          1              2        12       34

我的原始框架中有更多的列。我如何返回(对于每个组,所以按行)每行前 3 个最低和前 3 个最高并返回相应的列值? 注意:group 是一个索引:

df = df.set_index('group') 

df.apply(lambda x: df.columns[np.argsort(x)], 1).iloc(axis=0)[:, :3]

上面试过,但它说 IndexingError: Too many indexers.. 不知道如何获得每行的最高和最低 3 列..

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    您可以沿列使用.agg()(从而将其应用于每一行)并返回一个带有适当元素的系列。要找出它们是什么,请使用nlargestnsmallest

    >>> df.agg(lambda s: pd.Series([*s.nlargest(3).index, *s.nsmallest(3).index],
    ...                            ['max1', 'max2', 'max3', 'min1', 'min2', 'min3']),
    ... axis='columns')
                 max1       max2        max3       min1        min2       min3
    group                                                                     
    A      musicspend  foodspend  clothspend  shopspend  clothspend  foodspend
    B      musicspend  foodspend  clothspend  shopspend  clothspend  foodspend
    C      musicspend  foodspend  clothspend  shopspend  clothspend  foodspend
    d      musicspend  foodspend  clothspend  shopspend  clothspend  foodspend
    

    有些列是重复的,但这是因为在您的示例中只有 4 个:在这里,第 3 个最小的也是第 2 个最大的,依此类推。

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 1970-01-01
      • 2019-10-21
      • 2020-04-28
      • 2021-05-06
      • 2022-06-11
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多