python - 根据不同的列条件过滤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 |
解决方案
你看起来像这样:
>>> 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
推荐阅读
- batch-file - 是否可以在没有消息的情况下暂停批处理脚本?
- javascript - 如果字符串不包含值
- android - 如何创建一个Android PopupWindow,它将在当前活动的任何内容之上弹出?
- autodesk-forge - 可靠地确定 BIM 360 项目的 Revit 版本
- android - SQLDelight 模式生成失败
- c++ - C++中指针的类型转换和类型转换
- c# - 如何确定 ExecuteReader 是否返回结果集
- rxjs - 确定导致 observable 完成的原因
- monitoring - Prometheus:合并二元运算中缺失标签的值
- c++ - 这个声明正确吗?--- 虚拟无效 AcquireLockExclusive() RTC_EXCLUSIVE_LOCK_FUNCTION() = 0;