如何获得熊猫每行的前3个最小值和前3个最高值



我有一个如下表:

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个最高值,并返回相应的列值?注:组是一个索引:

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

上面试过了,但上面写着IndexingError:索引器太多。。不知道如何为每行获取最高和最低的前3列。。

您可以沿着列使用.agg()(从而将其应用于每一行(,并返回具有适当元素的Series。要找出它们是什么,请使用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个:这里,第三小的也是第二大的,依此类推

最新更新