【问题标题】:How to keep only the most recent revised order for each order in Pandas如何在 Pandas 中只保留每个订单的最新修改订单
【发布时间】:2018-01-11 21:32:07
【问题描述】:

假设我有一个跟踪订单号的数据框,以及该订单的修订号在两个不同的列中,如下所示:

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
 0AXL3     3       $8.00
 0BDF1     2       $8.50

在 pandas 中有快速的方法吗?

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    IIUC:

    In [100]: df.groupby('OrderNum', as_index=False).last()
    Out[100]:
      OrderNum  RevNum TotalPrice
    0    0AXL3       3      $8.00
    1    0BDF1       2      $8.50
    

    更新:

    如果数据框中还有其他列,是否会保留这些列? 也一样?

    In [116]: df['new'] = np.arange(len(df))
    
    In [117]: df
    Out[117]:
      OrderNum  RevNum TotalPrice  new
    0    0AXL3       0      $5.00    0
    1    0AXL3       1      $4.00    1
    2    0AXL3       2      $7.00    2
    3    0AXL3       3      $8.00    3
    4    0BDF1       0      $3.00    4
    5    0BDF1       1      $2.50    5
    6    0BDF1       2      $8.50    6
    
    In [118]: df.groupby('OrderNum', as_index=False).last()
    Out[118]:
      OrderNum  RevNum TotalPrice  new
    0    0AXL3       3      $8.00    3
    1    0BDF1       2      $8.50    6
    

    【讨论】:

    • 谢谢!如果数据框中还有其他列,这是否也会保留这些列?抱歉 - python 超级新手
    【解决方案2】:

    一种方法是使用 drop_duplicates,注意数据框应该在 RevNum 上从小到大排序,或者你可以添加 sort_values:

    df1.drop_duplicates(subset='OrderNum', keep='last')
    

    输出:

      OrderNum  RevNum TotalPrice
    3    0AXL3       3      $8.00
    6    0BDF1       2      $8.50
    

    df1[~df1.duplicated(subset='OrderNum', keep='last')]
    

    输出:

      OrderNum  RevNum TotalPrice
    3    0AXL3       3      $8.00
    6    0BDF1       2      $8.50
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 2021-11-16
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多