将组的前N行与Pandas组合成一行列表

2024-05-13 07:43:54 发布

您现在位置:Python中文网/ 问答频道 /正文

这里对Python和熊猫来说是相当陌生的

我正在尝试将基于单独列中的值的前n行组合成一行,并使用Pandas

使用一个假设的示例,假设下表已经按“金额”列对desc进行了排序:

^{tb1}$

我想生成一个表,根据store_id进行分组,每一行都是基于“amount”列的值的前n个项目的列表。因此,如果我想按store_id查看前2项,该表如下所示:

^{tb2}$

我在这里尝试了以下建议:How to combine multiple rows into a single row with pandas,但是我一直遇到一个“'GroupedData'对象不可订阅”错误

如果您能就如何解决此问题提出任何建议,我们将不胜感激。先谢谢你


Tags: 项目storeid示例pandas列表排序金额
3条回答

由于表已按amount列对desc进行排序,因此可以按^{}获得每个组的前n行。要进一步将这些前n行的item列分组到列表中,您可以进一步使用^{},如下所示:

n = 2      # define n

(df.groupby('store_id').head(n)
   .groupby('store_id')['item'].agg(list)
).reset_index()

结果:

   store_id           item
0         1  [shirt, sock]
1         2  [sock, pants]

试试这个:

(df.sort_values('amount',ascending=False)
 .groupby('store_id')
 .agg({'item':lambda x: x.iloc[0:2].tolist()}))

尝试:

output = df.groupby("store_id") \
           .apply(lambda x: x.nlargest(2, "amount")["item"].tolist()) \
           .rename(index="item")

>>> output
store_id
00001    [shirt, sock]
00002    [sock, pants]
Name: item, dtype: object

相关问题 更多 >