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'))
(我正在学习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'))