gpt4 book ai didi

python - 查询数据框以在 pandas 中创建新数据框

转载 作者:行者123 更新时间:2023-11-30 22:06:06 25 4
gpt4 key购买 nike

我有一组产品,由其代码表示,并且我对该月销量排名前 5 的产品感兴趣(假设它们的 product_id 是 P112(前 1 名)、P134(前 2 名)、P219(前 3 名)、P361(前 4 名)和 P443(前 5 名),尽管这些情况每月都会发生变化)。我有一个表,其中包含 employee_idcustomer_idproduct_idpurchase_date,以及表中的每一行代表一笔销售。我只对拥有前 5 个产品的销售感兴趣,因为我想显示每个员工前 5 个销售的分布情况。本质上,我想创建一个新表,其中每行都有一个唯一的员工,然后将前 5 个产品的每个销售额作为列。

给出下表(实际上更长)和排名前 5 的产品的 ID:

Employee_id | Customer_id | Product_id | Date     |
E12 | C10 | P112 | 10/05/18 |
E11 | C5 | P400 | 10/05/18 |
E20 | C19 | P219 | 10/06/18 |
E23 | C10 | P155 | 10/07/18 |
E19 | C06 | P219 | 10/07/18 | ...

生成的数据框看起来像这样

Employee_id | Top1 | Top2 | Top3 | Top4 | Top5 |
E12 | 1 | 0 | 5 | 6 | 0 |
E19 | 3 | 2 | 1 | 0 | 1 |
E23 | 2 | 1 | 0 | 4 | 2 |
E44 | 0 | 0 | 0 | 0 | 0 | ...

我不确定如何以干净清晰的方式从第一个数据帧转到第二个数据帧。我本来打算使用 Pandas。我的一个想法是迭代第一个数据帧,并为每个顶级产品创建一个字典,其中键是employee_id,值是计数(如果顶级产品向员工展示)。但缺少许多实现细节。我希望有任何指导、代码或建议的方法。谢谢!

最佳答案

首先按 boolean indexing 筛选前 5 个产品与 isin ,然后按 size 获取计数并通过 unstack reshape ,添加reindex为了正确排序列并最后使用f-strings列表理解创建新列名称:

#top5 created dynamically from column Product_id
#top5 = df['Product_id'].value_counts().index[:5])

top5 = ['P112','P134','P219','P361','P443']

df = (df[df['Product_id'].isin(top5)]
.groupby(['Employee_id','Product_id'])
.size()
.unstack(fill_value=0)
.reindex(columns=top5, fill_value=0))

df.columns = [f'Top{x}' for x in range(1,6)]
print (df)
Top1 Top2 Top3 Top4 Top5
Employee_id
E12 1 0 0 0 0
E19 0 0 1 0 0
E20 0 0 1 0 0
<小时/>
df = df.reset_index()
print (df)
Employee_id Top1 Top2 Top3 Top4 Top5
0 E12 1 0 0 0 0
1 E19 0 0 1 0 0
2 E20 0 0 1 0 0

关于python - 查询数据框以在 pandas 中创建新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52828278/

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