基于另一个数据帧的一列删除一个数据帧的行

2024-04-26 01:01:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了两个DataFrame,希望删除df1中的行,其中我们在df2的列“a”中有相同的值。此外,df2中的一个公共值只会删除一行

df1 = pd.DataFrame({'a':[1,1,2,3,4,4],'b':[1,2,3,4,5,6],'c':[6,5,4,3,2,1]})
df2 = pd.DataFrame({'a':[2,4,2],'b':[1,2,3],'c':[6,5,4]})
result = pd.DataFrame({'a':[1,1,3,4],'b':[1,2,4,6],'c':[6,5,3,1]})

Tags: dataframeresultpddf1df2
3条回答

试试这个:

import pandas as pd
df1=pd.DataFrame({'a':[1,1,2,3,4,4],'b':[1,2,3,4,5,6],'c':[6,5,4,3,2,1]})
df2=pd.DataFrame({'a':[2,4,2],'b':[1,2,3],'c':[6,5,4]})
df2a = df2['a'].tolist()
def remove_df2_dup(x):
    if x in df2a:
        df2a.remove(x)
        return False
    return True
df1[df1.a.apply(remove_df2_dup)]

它从df2['a']创建一个列表,然后根据df1['a']的每个值检查该列表,每次df1中有匹配项时,都从列表中删除值

试试这个

df1=pd.DataFrame({'a':[1,1,2,3,4,4],'b':[1,2,3,4,5,6],'c':[6,5,4,3,2,1]})
df2=pd.DataFrame({'a':[2,4,2],'b':[1,2,3],'c':[6,5,4]})

for x in df2.a:
    if x in df1.a:
        df1.drop(df1[df1.a==x].index[0], inplace=True)

print(df1)

使用^{}+^{}创建布尔掩码,并使用此掩码筛选df1中的行:

m = df1['a'].isin(df2['a']) & ~df1['a'].duplicated()
df = df1[~m]

结果:

print(df)
   a  b  c
0  1  1  6
1  1  2  5
3  3  4  3
5  4  6  1

相关问题 更多 >