Pandas Concat 后删除指定的重复项

Pandas Drop Specified Duplicates After Concat

我正在尝试编写一个 python 脚本来连接两个 csv 文件,然后删除重复的行。这是我正在连接的 csv 的示例:

csv_1

type    state    city    date        estimate    id
lux     tx       dal     2019/08/15  .8273452    10
sed     ny       ny      2019/05/12  .624356     10
cou     cal      la      2013/04/24  .723495     10
.       .        .       .           .           .
.       .        .       .           .           .

csv_2

type    state    city    date        estimate    id
sed     col      den     2013/05/02  .7234957    232
sed     mi       det     2015/11/17  .4249357    232
lux     nj       al      2009/02/29  .627234     232
.       .        .       .           .           .
.       .        .       .           .           .

截至目前,我将这两个连接在一起的代码如下所示:

csv_1 = pd.read_csv('csv_1.csv')
csv_2 = pd.read_csv('csv_2.csv')
union_df = pd.concat([csv_1, csv_2])
union_df.drop_duplicates(subset=['type', 'state', 'city', 'date'], inplace=True, keep='first')

有什么方法可以确保只删除 id = 232 的行,而 none id = 10 的行被删除?只是一种指定仅从第二个 csv 中的行从连接的 csv 中删除的方法吗?

谢谢

使用,duplicated 和布尔逻辑:

union_df.loc[~union_df.duplicated(subset=['type','state','city','date'], keep='first') & (union_df['id'] == 233)]

我建议您使用 duplicated 方法,而不是使用 drop_duplicates 方法直接删除重复项。后者的工作方式与第一个相同,但它 returns 一个布尔向量,指示哪些行是重复的。调用它后,您可以将其输出与 id 结合起来以实现您的目的。往下看

csv_1 = pd.read_csv('csv_1.csv')
csv_2 = pd.read_csv('csv_2.csv')
union_df = pd.concat([csv_1, csv_2])
union_df["dups"]= union_df.duplicated(subset=['type', 'state', 'city', 'date'], 
                                      inplace=True, keep='first')

union_df = union_df.loc[lambda d: ~((d.dups) & (d.id==232))]