gpt4 book ai didi

python - Pandas 数据帧增量(减法)

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:41 29 4
gpt4 key购买 nike

我有 2 个非索引数据框如下:df1

John   Mullen  12/08/1993
Lisa Bush 06/12/1990
Maria Murphy 30/03/1989
Seth Black 21/06/1991

和df2

John   Mullen  12/08/1993
Lisa Bush 06/12/1990
Seth Black 21/06/1991
Joe Maher 28/09/1990
Debby White 03/01/1992

我想要一个数据增量,其中只会出现 df2 而不是 df1 中的记录:即

Joe    Maher   28/09/1990
Debby White 03/01/1992

我有办法实现这个吗?我尝试了内部联接,但找不到从 df2 中减去它的方法。

非常感谢任何帮助。

最佳答案

您可以将列表推导式与 join 一起使用,为每个表创建唯一键,其中包含名字、姓氏和日期字段(我假设是出生日期)。如果尚未将每个字段转换为字符串,则需要将其转换为字符串。

然后,您将另一个列表理解与 enumerate 一起使用,以获取 key2 中不在 key1 中的每个键的索引位置。

最后,根据上一步的索引,使用iloc获取df2中的所有行。

df1 = pd.DataFrame({'First': {0: 'John', 1: 'Lisa', 2: 'Maria', 3: 'Seth'},
'Last': {0: 'Mullen', 1: 'Bush', 2: 'Murphy', 3: 'Black'},
'dob': {0: '12/08/1993', 1: '06/12/1990', 2: '30/03/1989', 3: '21/06/1991'}})

df2 = pd.DataFrame({'First': {0: 'John', 1: 'Lisa', 2: 'Seth', 3: 'Joe', 4: 'Debby'},
'Last': {0: 'Mullen', 1: 'Bush', 2: 'Black', 3: 'Maher', 4: 'White'},
'dob': {0: '12/08/1993', 1: '06/12/1990', 2: '21/06/1991', 3: '28/09/1990', 4: '03/01/1992'}})

key1 = ["".join([first, last, dob])
for first, last, dob in zip(df1.First, df1.Last, df1.dob)]

key2 = ["".join([first, last, dob])
for first, last, dob in zip(df2.First, df2.Last, df2.dob)]

idx = [n for n, k in enumerate(key2)
if k not in key1]

>>> df2.iloc[idx, :]
First Last dob
3 Joe Maher 28/09/1990
4 Debby White 03/01/1992

假设您的数据框中没有任何其他列,您可以按照@SebastianWozny 的建议使用drop_duplicates。但是,您只需选择添加的新行(而不是 df1)。您可以按如下方式执行此操作:

>>> df1.append(df2).drop_duplicates().iloc[df1.shape[0]:, :]
First Last dob
3 Joe Maher 28/09/1990
4 Debby White 03/01/1992

关于python - Pandas 数据帧增量(减法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860879/

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