Python Pandas: 如何删除*正确*重复的行?
Python Pandas: How to drop the *correct* duplicate row?
我有一个 Pandas 数据框,看起来像:
ID, Customer, Status, Score, Size
01, Cust-A, NaN, 100, A
01, Cust-A, Valid, 100, A
02, Cust-B, Invalid, 80, B
02, Cust-B, Invalid, NaN, B
03, Cust-C, Valid, 95, C
04, Cust-D, Invalid, 76, NaN
04, Cust-D, NaN, 76, NaN
...
以此类推
如何删除 正确的 行?
我想在 ID-01 的情况下删除第一行,在 ID-02 的情况下删除第二行,在 ID-04 的情况下我想保留第一行,因为它是更少的 NaN
一个选项是计算每个 ID 的缺失值总数,提取最小缺失值的索引(idxmin()
)并使用该索引对原始数据框进行子集化:
df.loc[df.groupby('ID', as_index=False).apply(lambda g: g.isnull().sum(axis=1).idxmin())]
# ID Customer Status Score Size
#1 1 Cust-A Valid 100.0 A
#2 2 Cust-B Invalid 80.0 B
#4 3 Cust-C Valid 95.0 C
#5 4 Cust-D Invalid 76.0 NaN
我有一个 Pandas 数据框,看起来像:
ID, Customer, Status, Score, Size
01, Cust-A, NaN, 100, A
01, Cust-A, Valid, 100, A
02, Cust-B, Invalid, 80, B
02, Cust-B, Invalid, NaN, B
03, Cust-C, Valid, 95, C
04, Cust-D, Invalid, 76, NaN
04, Cust-D, NaN, 76, NaN
...
以此类推
如何删除 正确的 行?
我想在 ID-01 的情况下删除第一行,在 ID-02 的情况下删除第二行,在 ID-04 的情况下我想保留第一行,因为它是更少的 NaN
一个选项是计算每个 ID 的缺失值总数,提取最小缺失值的索引(idxmin()
)并使用该索引对原始数据框进行子集化:
df.loc[df.groupby('ID', as_index=False).apply(lambda g: g.isnull().sum(axis=1).idxmin())]
# ID Customer Status Score Size
#1 1 Cust-A Valid 100.0 A
#2 2 Cust-B Invalid 80.0 B
#4 3 Cust-C Valid 95.0 C
#5 4 Cust-D Invalid 76.0 NaN