gpt4 book ai didi

python - 根据在另一个数据框中的查找删除数据框中的行

转载 作者:行者123 更新时间:2023-11-28 22:25:09 25 4
gpt4 key购买 nike

我使用两个数据框。我想根据另一个数据框中的匹配项删除第一个数据框中的行。

在 df1 中,我有两列(称为 Type1 和 Type2)+ 一个标志。我想删除 flag = True & where Type1 & Type2 match a combination in another df2.

import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randint(0,10,size=(100, 2)),columns = ["Type1","Type2"])
df1["Flag"] = np.random.randint(0,10,size=(100))>6
df1.head()

Type1 Type2 Flag
0 8 5 False
1 1 6 False
2 9 2 False
3 0 9 True
4 2 9 False

df2 = pd.DataFrame(np.random.randint(0,10,size=(100, 2)),columns = ["Type1","Type2"])
df2.head()

Type1 Type2
0 0 9
1 7 8
2 5 1
3 3 3
4 3 2

例如,df1 中 index=3 的行应该被删除,因为 Flag=True 并且 (0,9) 存在于 df2 中。

最佳答案

使用merge对于一个 df,然后按 boolean indexing 过滤- 只需要 df1 中的值(left_only)和 Flag 中的 False,所以 both< 的行True 被删除。

#on parameter omitted if only matched column are same in both df 
df3 = pd.merge(df1, df2, how='left', indicator=True)
#if multiple matched columns
#df3 = pd.merge(df1, df2, how='left', indicator=True, on = ['Type1','Type2'])
print (df3)
Type1 Type2 Flag _merge
0 8 5 False left_only
1 1 6 False left_only
2 9 2 False left_only
3 0 9 True both
4 2 9 False left_only

df3 = df3.loc[(df3['_merge'] == 'left_only') & (~df3['Flag']), ['Type1','Type2']]
print (df3)
Type1 Type2
0 8 5
1 1 6
2 9 2
4 2 9

也可以创建掩码然后仅过滤 df1(如果有很多列):

m = (df3['_merge'] == 'left_only') & (~df3['Flag'])
df1 = df1[m]
print (df1)
Type1 Type2 Flag
0 8 5 False
1 1 6 False
2 9 2 False
4 2 9 False

关于python - 根据在另一个数据框中的查找删除数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45757387/

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