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))]
我正在尝试编写一个 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))]