我有一个订单数据集和下订单的人。订单有一个唯一的标识符,买家在多个订单中有一个唯一的标识符。下面是该数据集的一个示例:
| Order_ID | Order_Date | Buyer_ID |
|----------|------------|----------|
| 123421 | 01/01/19 | a213422 |
| 123421 | 01/01/19 | a213422 |
| 123421 | 01/01/19 | a213422 |
| 346345 | 01/03/19 | a213422 |
| 567868 | 01/05/19 | a346556 |
| 567868 | 01/05/19 | a346556 |
| 234534 | 01/10/19 | a678909 |
我希望能够将数据集筛选到只下过一个订单的个人,即使该订单有多个项目:
| Order_ID | Order_Date | Buyer_ID |
|----------|------------|----------|
| 567868 | 01/05/19 | a346556 |
| 567868 | 01/05/19 | a346556 |
| 234534 | 01/10/19 | a678909 |
如果我尝试df[df['Buyer_ID'].map(df['Buyer_ID'].value_counts()) == 1]
,我会得到一个非常奇怪的情况,结果数据帧只是Order_ID
和Buyer_ID
之间存在1对1关系的行。像这样:
| Order_ID | Order_Date | Buyer_ID |
|----------|------------|----------|
| 346345 | 01/03/19 | a213422 |
| 234534 | 01/10/19 | a678909 |
在我想要的结果中,Buyer_ID
a213422
根本不应该出现,因为那个人有多个Order_ID
。你知道吗
这让我相信value_counts()
不是执行此筛选器的合适方法,或者我做得不对。执行此筛选的适当方法是什么?你知道吗
下面是另一种方法:
方法1:布尔索引与
groupby.transform
方法2:^{}
方法3:
boolean indexing
与Series.map
输出
如果要删除重复项,请在末尾使用^{} :
相关问题 更多 >
编程相关推荐