gpt4 book ai didi

Python,在带有 pandas DataFrame 的 "order by"中使用 "group concat"

转载 作者:行者123 更新时间:2023-11-29 00:05:15 25 4
gpt4 key购买 nike

我有以下 Pandas DataFrame:

product_id     category     number_of_purchase
23 cat1 18
65 cat2 19
66 cat1 4
98 cat1 9
998 cat1 1
798 cat2 8

我想从这个 DataFrame 创建这个新的 DataFrame:

category     url
cat1 65&23
cat2 65&8

(对于每个类别,我想检索购买次数最多的 2 件商品)

在 MySQL 中我会这样做:

select
category,
group_concat(product_id order by numbe_of_purchase desc limit2 separator '&')
from my_table
group by category

但我不知道如何使用 Pandas DataFrame 进行 group_concat,也不知道如何在 group_concat 中使用 order by 和 limit。

最佳答案

python/pandas 中没有 group concat 函数,因此我们必须使用一些 groupby。它比 SQL 长一点,但仍然相对较短(主要部分是 3 行)。

让我们创建数据框:

import pandas as pd

data = {'product_id': [23, 65, 66, 98, 998, 798],
'category': ['cat1', 'cat2', 'cat1', 'cat1', 'cat1', 'cat2'],
'number_of_purchase': [18,19,4,9,1,8]}

df = pd.DataFrame(data)
print df

结果:

  category  number_of_purchase  product_id
0 cat1 18 23
1 cat2 19 65
2 cat1 4 66
3 cat1 9 98
4 cat1 1 998
5 cat2 8 798

第一步:我们按销售额对数据框进行排序:

df = df.sort(columns='number_of_purchase', ascending=False)
df

结果:

  category  number_of_purchase  product_id
1 cat2 19 65
0 cat1 18 23
3 cat1 9 98
5 cat2 8 798
2 cat1 4 66
4 cat1 1 998

第二步:我们使用 groupby 操作。对于每个类别,它将创建一个包含前两个类别的列表。数据仍然是整数。

df = df.groupby('category').apply(lambda x: list(x.product_id)[:2])
print df

结果:

category
cat1 [23, 98]
cat2 [65, 798]
dtype: object

如果您需要将结果作为字符串,我们使用一个简单的 lambda 操作:

df.apply(lambda x: '&'.join([str(elem) for elem in x]))

结果:

category
cat1 23&98
cat2 65&798
dtype: object

关于Python,在带有 pandas DataFrame 的 "order by"中使用 "group concat",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27857842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com