我有一个数据框,大致如下:
>>> data
price currency
id
2 1050 EU
5 1400 EU
4 1750 EU
8 4000 EU
7 630 GBP
1 1000 GBP
9 1400 GBP
3 2000 USD
6 7000 USD
我需要得到一个新的数据帧,其中每种货币的n
定价最高的产品,其中n
取决于货币,并在另一个数据帧中给出:
>>> select_number
number_to_select
currency
GBP 2
EU 2
USD 1
如果必须选择相同数量的高价元素,我可以使用pandas.groupby
按货币对数据进行分组,然后使用分组对象的head
方法。
然而,head
只接受一个数字,而不接受数组或某个表达式。
当然,我可以编写一个for
循环,但这将是一种非常笨拙和低效的方法。
怎么能做得好呢?
下面是一个解决方案:
编辑-我的答案来自jezrael's answer:我用
dfg.name
替换了dfg.currency.iloc[0]
。第二次编辑-正如注释中指出的,
select_number
是一个数据帧,因此我首先将其转换为一个序列。马克苏和耶斯雷尔,谢谢你的评论!
你可以这样做:
输出
说明:
rn
-是每个分区/组的辅助列-行数,按price
(在该组内)降序排序qry
-是动态生成的查询您可以使用:
通过
dict
映射的解决方案:解决方案2:
说明:
我认为对于调试来说,最好使用函数
f
和print
:相关问题 更多 >
编程相关推荐