如何在保留Pandas中其余行的同时删除数据框中的重复值?

时间:2019-08-09 22:48:59

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

我正在用Jupyter笔记本制作一些毛利报告。我已经将数据作为csv从CRM中导出,并且正在使用Pandas来处理数据。一些数据在几列中重复。我需要删除那些列中的重复值,但保留其余行。

我尝试对两列的子集进行drop_duplicates,但它删除了整个行。

          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行是在PO Number和PO小计列中重复的示例。

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

          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  

1 个答案:

答案 0 :(得分:0)

使用DataFrame.duplicated检查哪些行包含基于{ "unknown key": ["list", "of", "random", "strings"] } PO Number的重复项。然后有条件地将值PO 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']] = ''