Pandas帮助特殊需求

2024-09-29 02:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我很抱歉没有提供信息的标题,但我需要帮助熊猫的要求,我不能继续在一个小标题。你知道吗

所以我有一个包含列的订单数据框

  • OrderId
  • ClientId
  • OrderDate
  • ReturnQuantity

我想添加一个布尔列HasReturnedBefore,仅当具有相同ClientId的客户已经下了一个或多个上一个订单(OrderDate次),且ReturnQuantity大于0时,该列才是True。你知道吗

我不知道该如何面对这个问题,我对熊猫的微妙之处还不够熟悉。你知道吗


Tags: 数据订单信息true标题客户clientid小标题
1条回答
网友
1楼 · 发布于 2024-09-29 02:17:00

如果我正确理解你的问题,这就是你需要的:

df.sort_values(by=['ClientId','OrderDate']).assign(HasReturnedBefore = lambda x: (x['ClientId'] == x['ClientId'].shift(1))&(x.groupby('ClientId')['ReturnQuantity'].transform(all)))

首先,通过用于区分记录的列来need to sort_values,在本例中是ClientIdOrderDate。你知道吗

现在可以使用assign,它用于向数据帧添加新列。你知道吗

在文档中,您可以看到如何使用assign,但在本例中,我所做的是:

  1. 检查ClientID是否与下一个ClientID相同,并且
  2. 检查用户是否所有的值ReturnQuantity都大于0

第一次出现多个订单的用户为false的原因是,它被视为以前没有购买过(以前没有购买过),但可以设置为True,但需要进行额外的编辑。你知道吗

附加功能:

  1. shift-按给定的行数移动所有记录
  2. groupby-按所需列和提供的函数对数据帧进行分组
  3. transform-将groupby对象与现有数据帧合并

相关问题 更多 >