gpt4 book ai didi

python pandas dataframe 查找包含特定值的行并返回 bool 值

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:02 25 4
gpt4 key购买 nike

我想比较两个数据帧 df1 和 df2。 df1 是一个每小时更新一次的数据。 df2 是一个已经存在的数据框。我想附加已更新的特定行。

例如,这里是df1

df1:

fd1

其中包含5行信息

和已经存在的df2

df2:

df2

我们可以看出添加了 eric,但 df2 并不代表它。

我可以用 df1 覆盖 df2,但我不应该这样做,因为在写入数据后会有人更新的注释。

所以,我决定通过 id 从 df2 中找到它来删除每一行数据,并使用 for 循环删除它们

在那之后,将只保留 eric 的行,这样我就可以将 eric 附加到 df2。

所以我尝试的是这个

for index, row in df1.iterrows():
id = row['id']
if df2.loc[df1['id'].isin(id)] = True:
df1[df1.id != id)

并返回语法错误....

我走的路对吗?这将是解决此问题的最佳解决方案吗?我应该如何更改代码以实现我的目标?

最佳答案

修复你的代码......

l=[]
for index, row in df1.iterrows():
id = row['Id']
if sum(df2['Id'].isin([id]))>0:
l.append(id)
l
Out[334]: [0, 1, 2, 3, 4] # those are the row you need to remove

df1.loc[~df1.index.isin(l)]# you remove them by using `~` + .isin
Out[339]:
Id Name
5 5 F
6 6 G

通过使用pd.concat

pd.concat([df2,df1[~df1.Id.isin(df2.Id)]],axis=0)
Out[337]:
Id Name
0 0 A
1 1 B
2 2 C
3 3 D
4 4 E
5 5 F
6 6 G

数据输入

fake = {'Id' : [0,1,2,3,4,5,6],
'Name' : ['A','B','C','D','E','F','G']}
df1 = pd.DataFrame(fake)

fake = {'Id' : [0,1,2,3,4],
'Name' : ['A','B','C','D','E']}
df2 = pd.DataFrame(fake)

关于python pandas dataframe 查找包含特定值的行并返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46638618/

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