首页 > 解决方案 > 根据不同的列条件过滤python中的数据框

问题描述

我在 Python 中有一个数据框,如下所示,我需要找到交易相同类别商品的客户 (Customer_ID),并查找大多数相关客户是否购买或出售相关类别。完成此操作后,我应该了解其中哪些正在使用 Delivery、Download/Upload 或两者。避免重复行对我来说很重要(例如 customer_id 的 40275 在软件类别中有三个重复),这应该算作一个。所以,我需要将用户分类为相同的类别,交付和下载/上传,不要重复。

客户ID 类别 类型 送货 下载上载
40275 真的 真的
40275 软件 错误的 真的
40275 软件 错误的 真的
40275 软件 错误的 真的
39900 糖果食谱 真的 真的
39900 真的 真的
39900 软件 真的 真的
35886 错误的 真的
35886 错误的 真的
35886 糖果食谱 错误的 真的
35886 软件 错误的 真的
40350 软件 真的 真的
28129 软件 错误的 真的
41571 软件 真的 真的

我试图根据类别字段获取主要数据帧的一个子集,但在那之后我不确定如何同时过滤所有这些字段,因为有一些重复的行和一些单行。我应该如何在 Python 中解决这个问题?

我认为应该是这样的输出可能会有所帮助。但我没有在交付或上传列上应用任何过滤器:

客户ID 类别 类型 送货 下载上载 相同类别和类型的计数
40275 真的 真的 2
40275 软件 错误的 真的 4
39900 糖果食谱 真的 真的 2
39900 真的 真的 2
39900 软件 真的 真的 4
35886 错误的 真的 1
35886 错误的 真的 2
35886 糖果食谱 错误的 真的 2
35886 软件 错误的 真的 4
40350 软件 真的 真的 4
28129 软件 错误的 真的 2
41571 软件 真的 真的 2

标签: pythonpandasalgorithm

解决方案


你看起来像这样:

>>> df.drop_duplicates().assign(value=1) \
      .pivot(index=['Customer_ID', 'Category', 'Delivery', 'Download/Upload'], 
             columns='Type', values='value') \
      .fillna(0).astype(int).reset_index()

Type  Customer_ID              Category  Delivery  Download/Upload  Buy  Sell
0           28129              Software     False             True    1     0
1           35886                  Book     False             True    1     1
2           35886  Confectionery recipe     False             True    0     1
3           35886              Software     False             True    0     1
4           39900                  Book      True             True    1     0
5           39900  Confectionery recipe      True             True    0     1
6           39900              Software      True             True    0     1
7           40275                  Book      True             True    1     0
8           40275              Software     False             True    0     1
9           40350              Software      True             True    0     1
10          41571              Software      True             True    1     0

推荐阅读