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

标签 python pandas dictionary dataframe

我有一组产品,由其代码表示,并且我对该月销量排名前 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/

相关文章:

python - 将字符串列表转换为 float

python - 升级pytest导致TypeError : 'NoneType' object is not callable error

python - 用 Pandas 读取 'csv' 文件时解析日期时间

python - 由于 unicode 解码错误,无法在 pandas 中打开 csv 文件

python - 如何重命名包名称

python - 将 openpyxl 数据传递给 pandas

python - pandas groupby 中连续日期之间的差异

javascript - 在 javascript 中清空普通对象的最有效方法是什么?

python - 从Python中的列表创建字典

python - 如何将元组字典转换为列表字典(Python)?