【问题标题】:How to create a new column stating if this row is the most recent revised order for each order in Pandas如何创建一个新列,说明该行是否是 Pandas 中每个订单的最新修订订单
【发布时间】:2018-04-12 17:05:32
【问题描述】:

假设我有以下数据框捕获订单号、同一订单的修订号和总价:

OrderNum  RevNum  TotalPrice
 0AXL3     0       $5.00
 0AXL3     1       $4.00
 0AXL3     2       $7.00
 0AXL3     3       $8.00
 0BDF1     0       $3.00
 0BDF1     1       $2.50
 0BDF1     2       $8.50

我将如何添加一列来说明该行是否是订单的最新修订?所需的输出如下:

OrderNum  RevNum  TotalPrice  NewestRevision
 0AXL3     0       $5.00      No
 0AXL3     1       $4.00      No
 0AXL3     2       $7.00      No
 0AXL3     3       $8.00      Yes
 0BDF1     0       $3.00      No
 0BDF1     1       $2.50      No
 0BDF1     2       $8.50      Yes

请注意,这与我之前问过的问题非常相似 here

然而,与其删除以前的条目,我们现在只需要一个新列来说明这是否是最新版本。提前感谢您的任何/所有帮助!

编辑:我的数据框中的行不一定按 OrderNum 排序

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    您可以将duplicatedmap 一起使用

    df['NewestRevision']=df.duplicated('OrderNum',keep='last').map({True:'No',False:'Yes'})
    df
    Out[328]: 
      OrderNum  RevNum TotalPrice NewestRevision
    0    0AXL3       0      $5.00             No
    1    0AXL3       1      $4.00             No
    2    0AXL3       2      $7.00             No
    3    0AXL3       3      $8.00            Yes
    4    0BDF1       0      $3.00             No
    5    0BDF1       1      $2.50             No
    6    0BDF1       2      $8.50            Yes
    

    【讨论】:

    • 这是否假设一个已排序的数据框?
    • @chrisz 是的,它将假定订单条目
    • 感谢您的回答,在我的示例中很抱歉,我已对数据框进行了排序,但情况并非总是如此。
    【解决方案2】:

    @Wen's answer 如果您的行总是排序,那么下面的@Wen's answer 非常好,因此每个组中的最后一行是最新版本。

    如果不是这样,并且假设“最新版本”相当于在组中拥有最高的RevNum,您可以执行以下操作:

    import numpy as np
    df['NewestRevision'] = np.where( \
        df.RevNum == df.groupby('OrderNum')['RevNum'].transform(np.max), 'Yes', 'No')
    

    这会检查RevNum 是否与给定OrderNum 的最高RevNum 相同,如果是则返回'Yes',否则返回'No'

    【讨论】:

    • 是的,为了澄清我的数据框中的行并不总是像我的示例中那样干净地排序。我应该编辑它以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多