Pandas - 如何获取列表

Pandas - How to get list of

(我正在学习Pandas,所以请说明解决方案)

我的数据是这样的:

Category    currency    sellerRating    Duration    endDay  ClosePrice  

0   Music/Movie/Game    US  3249    5   Mon     0.01    0.01    
1   Music/Movie/Game    US  3249    5   Mon     0.01    0.01    
2   Music/Movie/Game    US  3249    5   Mon     0.01    0.01    
3   Music/Movie/Game    US  3249    5   Mon     0.01    0.01    
4   Music/Movie/Game    US  3249    5   Mon     0.01    0.01    

Dtypes 结果是:

    Category          object
currency          object
sellerRating       int64
Duration           int64
endDay            object
ClosePrice       float64
OpenPrice        float64
PriceIncrease    float64
dtype: object

我试图找出每个类别的收盘价最高的前(例如前 10 个)项目。

没思路,放弃,每个类别都自己动手,试过:

df[(df['ClosePrice']> 93) & ([df.Category == 'Automotive'])]

...但是没有用。我得到的错误是:

ValueError: operands could not be broadcast together with shapes (351550,) (1975,) 

我也研究过 Crosstab,但这不是我要找的。

必须有一种方法可以在一行 Pandas 代码中自动执行我想要的操作。有什么建议吗?谢谢!

使用 groupby 然后应用仅保留前 k 个值的排序

top = 10
df.groupby('Category', group_keys=None).apply(lambda x: x.sort_values('ClosePrice')[:top])

既然你要求解释解决方案,那我就试试。

通过使用 groupby,您可以根据类别列创建数据组。每个组都有相同的类别。代码应用后,对于每个组,sort_values 将按 ClosePrice 对数据进行排序,然后仅获取最高值。

上面的代码可以'mess'保留原始索引的索引。如果您需要重置索引,您必须使用

df.groupby('Category', group_keys=None).apply(lambda x: x.sort_values('ClosePrice')[:top]).reset_index(drop=True)

我会使用 nlargest 方法:

df.groupby('Category', group_keys=False).apply(lambda x: x.nlargest(10, 'ClosePrice'))