我有一个非常大的数据框 [541909 rows x 8 columns]
。这是它的外观:
InvoiceNo StockCode Description Quantity InvoiceDate UnitPrice CustomerID Country
0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 12/1/2010 8:26 2.55 17850.0 United Kingdom
1 536365 71053 WHITE METAL LANTERN 6 12/1/2010 8:26 3.39 17850.0 United Kingdom
2 536365 84406B CREAM CUPID HEARTS COAT HANGER 8 12/1/2010 8:26 2.75 17850.0 United Kingdom
3 536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 12/1/2010 8:26 3.39 17850.0 United Kingdom
4 536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 12/1/2010 8:26 3.39 17850.0 United Kingdom
... ... ... ... ... ... ... ... ...
541904 581587 22613 PACK OF 20 SPACEBOY NAPKINS 12 12/9/2011 12:50 0.85 12680.0 France
541905 581587 22899 CHILDREN'S APRON DOLLY GIRL 6 12/9/2011 12:50 2.10 12680.0 France
541906 581587 23254 CHILDRENS CUTLERY DOLLY GIRL 4 12/9/2011 12:50 4.15 12680.0 France
541907 581587 23255 CHILDRENS CUTLERY CIRCUS PARADE 4 12/9/2011 12:50 4.15 12680.0 France
541908 581587 22138 BAKING SET 9 PIECE RETROSPOT 3 12/9/2011 12:50 4.95 12680.0 France
我想删除每行重复的所有 InvoiceNo 并只保留一个。例如,前 5 行具有相同的 InvoiceNo,所以我只想保留其中一行。
我尝试使用 for 循环来完成,但是由于数据集非常大,它需要很长时间。有没有更快的方法?
答案 0 :(得分:0)
您可以按照@Netim 的建议使用 drop_duplicates
(请参阅 documentation)
import numpy as np
import pandas as pd
duplicates = np.random.randint(0, 10, 100)
values = np.arange(0, 100)
df = pd.DataFrame({
'dupl': duplicates,
'vals': values
})
那你就可以了
df.drop_duplicates(
subset='dupl', keep='first',
ignore_index=True
)
或
df.drop_duplicates(
subset='dupl', keep='last',
ignore_index=True
)
但是,正如@Alex 所说,您必须决定要保留哪个副本。