熊猫帮助处理特定请求

时间:2018-03-26 12:54:46

标签: python pandas

我为无信息的头衔道歉,但我需要帮助一个大熊猫请求,我无法以小标题恢复。

所以我有一些包含

列的订单的数据框
  • OrderId
  • ClientId
  • OrderDate
  • ReturnQuantity

我想添加一个布尔列HasReturnedBefore,仅当具有相同True的客户发出一个或多个先前订单(ClientId劣质时,才会OrderDate ),ReturnQuantity大于0

我不知道如何解决这个问题,我对目前大熊猫的所有微妙之处还不够熟悉。

1 个答案:

答案 0 :(得分:0)

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

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. 相同
  3. 检查用户是否已将ReturnQuantity的所有值都大于0
  4. 第一次出现多个订单的用户为假的原因是因为它被视为没有先前的购买(它没有做过),但可以设置为True - 但是它需要额外的编辑。

    附加功能:

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