gpt4 book ai didi

python - pandas 如何存储使用 `drop_duplicates` 删除的行?

转载 作者:行者123 更新时间:2023-12-02 20:06:36 25 4
gpt4 key购买 nike

注意:请参阅下面的编辑。

我需要记录从我的 df 中删除的所有行,但我不确定如何捕获它们。日志应该是一个数据框,我可以为每个 .drop.drop_duplicates 操作更新它。以下是我要记录删除的行的 3 个代码示例:

df_jobs_by_user = df.drop_duplicates(subset=['owner', 'job_number'], keep='first')
df.drop(df.index[indexes], inplace=True)
df = df.drop(df[df.submission_time.dt.strftime('%Y') != '2018'].index)

我找到了 this不同的 .drop 案例的解决方案,该案例使用 pd.isnull 重新编码 pd.dropna 语句,因此允许在之前生成日志实际上删除行:

df.dropna(subset=['col2', 'col3']).equals(df.loc[~pd.isnull(df[['col2', 'col3']]).any(轴=1)])

但是在尝试使其适应 pd.drop_duplicates 时,我发现没有 pd.isduplicatepd.isnull 平行,所以这可能不是实现我需要的结果的最佳方式。


编辑

我在这里重写了我的问题,以便更准确地说明我想要的结果。

我从一个有一个 dupe 行的 df 开始:

import pandas as pd
import numpy as np
df = pd.DataFrame([['whatever', 'dupe row', 'x'], ['idx 1', 'uniq row', np.nan], ['sth diff', 'dupe row', 'x']], columns=['col1', 'col2', 'col3'])
print(df)

# Output:
col1 col2 col3
0 whatever dupe row x
1 idx 1 uniq row NaN
2 sth diff dupe row x

然后我从 jjp 实现解决方案:

df_droplog = pd.DataFrame()
mask = df.duplicated(subset=['col2', 'col3'], keep='first')
df_keep = df.loc[~mask]
df_droplog = df.append(df.loc[mask])

我打印结果:

print(df_keep)
# Output:
col1 col2 col3
0 whatever dupe row x
1 idx 1 uniq row NaN

df_keep 是我所期望和想要的。

print(df_droplog)
# Output:
col1 col2 col3
0 whatever dupe row x
1 idx 1 uniq row NaN
2 sth diff dupe row x
2 sth diff dupe row x

df_droplog 不是我想要的。它包括来自索引 0 和索引 1 的行,它们没有被删除,因此我不想在我的删除日志中出现。它还包括索引 2 中的行两次。我只想要一次。

我想要的:

print(df_droplog)
# Output:
col1 col2 col3
2 sth diff dupe row x

最佳答案

有一个并行:pd.DataFrame.duplicated返回 bool 系列。您可以按如下方式使用它:

df_droplog = pd.DataFrame()

mask = df.duplicated(subset=['owner', 'job_number'], keep='first')
df_jobs_by_user = df.loc[~mask]

df_droplog = df_droplog.append(df.loc[mask])

关于python - pandas 如何存储使用 `drop_duplicates` 删除的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com