这是我前面问题的另一个扩展,删除每行列子集中的重复项,只保留第一个副本,行和Drop duplicates in a subset of columns per row, rowwise, only keeping the first copy, rowwise only if there are 3 or more duplicates
我有以下 Dataframe (实际上大约有700万行)
import pandas as pd
data = {'date': ['2023-02-22', '2023-02-21', '2023-02-23'],
'x1': ['descx1a', 'descx1b', 'descx1c'],
'x2': ['ALSFNHF950', 'KLUGUIF615', np.nan],
'x3': [np.nan, np.nan, 24319.4],
'x4': [np.nan, np.nan, 24334.15],
'x5': [np.nan, np.nan, 24040.11],
'x6': [404.29, 75.21, 24220.34],
'x7': [np.nan, np.nan, np.nan],
'v': [np.nan, np.nan, np.nan],
'y': [404.29, 75.33, np.nan],
'ay': [np.nan, np.nan, np.nan],
'by': [np.nan, np.nan, np.nan],
'cy': [np.nan, np.nan, np.nan],
'gy': [np.nan, np.nan, np.nan],
'uap': [404.29, 75.33, np.nan],
'ubp': [404.29, 75.33, np.nan],
'sf': [np.nan, 2.0, np.nan]}
df = pd.DataFrame(data)
如果在我选择的列中有所有的重复项,当且仅当选择中的每个项都是重复项时,我希望删除重复项并只保留一个副本。
这意味着如果我的选择有4列,所有4列必须有相同的数字,它被视为重复。
如果4个选择中只有2个或3个重复,则不计数。
在上面的例子中,如果我的选择是['x6', 'y', 'uap', 'ubp']
,输出应该是,
data = {'date': ['2023-02-22', '2023-02-21', '2023-02-23'],
'x1': ['descx1a', 'descx1b', 'descx1c'],
'x2': ['ALSFNHF950', 'KLUGUIF615', np.nan],
'x3': [np.nan, np.nan, 24319.4],
'x4': [np.nan, np.nan, 24334.15],
'x5': [np.nan, np.nan, 24040.11],
'x6': [404.29, 75.21, 24220.34],
'x7': [np.nan, np.nan, np.nan],
'v': [np.nan, np.nan, np.nan],
'y': [np.nan, 75.33, np.nan],
'ay': [np.nan, np.nan, np.nan],
'by': [np.nan, np.nan, np.nan],
'cy': [np.nan, np.nan, np.nan],
'gy': [np.nan, np.nan, np.nan],
'uap': [np.nan, 75.33, np.nan],
'ubp': [np.nan, 75.33, np.nan],
'sf': [np.nan, 2.0, np.nan]}
不应触摸第二行,因为其中一列不同。
我怎样才能做到这一点?
2条答案
按热度按时间bvjxkvbb1#
如果要匹配所有重复项,可以使用:
输出:
中间体:
精度
请注意,如果您有浮点值,看起来相同的值可能不相等。在这种情况下,使用以下公式计算掩码可能更安全:
eoigrqb62#
您可以: