【问题标题】:How to remove duplicate values in dataframe while preserving the rest of the row in Pandas?如何删除数据框中的重复值,同时保留 Pandas 中的其余行?
【发布时间】:2019-12-17 15:50:15
【问题描述】:

我正在使用 jupyter 笔记本编写一些毛利润报告。我已将数据作为 csv 从我们的 CRM 中导出,并正在使用 Pandas 处理数据。一些数据在几列中重复。我需要删除这些列中的那些重复值,但保留行的其余部分。

我尝试在两列的一个子集上删除重复项,但它删除了整行。

          INV           INV SUB                 PO Number PO Subtotal  \
0      INV-002504       USD 350.00              PO-03977         240   
1      INV-002507     USD 1,400.00              PO-03846      603.56   
2             NaN              NaN              PO-03847         295   
3      INV-002489       USD 891.25              PO-03861      658.31   
4      INV-002453     USD 3,132.50              PO-03889     4751.19   
5      INV-002537     USD 3,856.29              PO-03889     4751.19   
6      INV-002420       USD 592.43              PO-03577     1188.46   
7      INV-002415    USD 10,779.00              PO-03727     5389.21

第 4 行和第 5 行是在采购订单编号和采购订单小计列中重复的示例。

我希望输出删除重复项,因此该值在所有情况下仅显示一次。

          INV           INV SUB                 PO Number PO Subtotal  \
0      INV-002504       USD 350.00              PO-03977         240   
1      INV-002507     USD 1,400.00              PO-03846      603.56   
2             NaN              NaN              PO-03847         295   
3      INV-002489       USD 891.25              PO-03861      658.31   
4      INV-002453     USD 3,132.50              PO-03889     4751.19   
5      INV-002537     USD 3,856.29                     
6      INV-002420       USD 592.43              PO-03577     1188.46   
7      INV-002415    USD 10,779.00              PO-03727     5389.21  

【问题讨论】:

    标签: python-3.x pandas duplicates jupyter-notebook


    【解决方案1】:

    使用DataFrame.duplicated 根据PO NumberPO Subtotal 检查哪些行包含重复项。然后有条件地将''的值替换为np.where

    m = df.duplicated(['PO Number', 'PO Subtotal'])
    
    df['PO Number'] = np.where(m, '', df['PO Number'])
    df['PO Subtotal'] = np.where(m, '', df['PO Subtotal'])
    

    或使用.loc 选择正确的行和列并将这些行替换为''

    m = df.duplicated(['PO Number', 'PO Subtotal'])
    df.loc[m, ['PO Number', 'PO Subtotal']] = ''
    

    输出

    
              INV        INV SUB PO Number PO Subtotal
    0  INV-002504     USD 350.00  PO-03977       240.0
    1  INV-002507   USD 1,400.00  PO-03846      603.56
    2         NaN            NaN  PO-03847       295.0
    3  INV-002489     USD 891.25  PO-03861      658.31
    4  INV-002453   USD 3,132.50  PO-03889     4751.19
    5  INV-002537   USD 3,856.29                      
    6  INV-002420     USD 592.43  PO-03577     1188.46
    7  INV-002415  USD 10,779.00  PO-03727     5389.21
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2021-05-18
      • 2019-12-03
      • 2021-12-06
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多