如何检测重复项,然后在重复项之间交叉检查两列的值是否相似?

2024-09-26 18:21:11 发布

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

所以我有一个这样的数据帧

 No    fname        sname        landline        address
 1   Alphred      Thomas         123              A
 2   Peter        Jay            345              B
 3   Donald       Hook           123              A
 4   Jay          Donald         345              B
 5   Jay          Donald         123              A
 6   Haskell      Peter          123              B

现在我想把所有的固定电话和地址的副本放在一起。因此,在上述情况下,组(123,A)将是一组循环实体,(345,B)将是另一组循环实体。我想忽略(123,B),因为这种情况只发生一次。你知道吗

现在,对于每个重复的组,我要检查fnmae和sname列中是否都出现了一个名称。所以在(123,A)的情况下,我们想要捕捉donald出现在fname和sname上的行(基本上它们必须是两个不同的行,两列必须有相似的名称),所以在上面的情况下,我们将选择第3行和第5行。我想在我们选了这个之后再做一次手术。名字被输入支票的日期。你知道吗

我如何做到这一点?我试过使用复制的,但这对第二次比较没有多大帮助?你知道吗


Tags: 数据no实体名称address情况thomashook
1条回答
网友
1楼 · 发布于 2024-09-26 18:21:11

可以使用^{}^{}作为掩码,然后使用^{}

mask = df.groupby(['landline','address']).apply(lambda x: x.fname.isin(x.sname) | 
                                                          x.sname.isin(x.fname) & 
                                                            (len(x) > 1))
mask = mask.reset_index(level=['landline','address'], drop=True).sort_index()
print (mask)
0    False
1     True
2     True
3     True
4     True
5    False
dtype: bool

df1 = df[mask]
print (df1)
   No   fname   sname  landline address
1   2   Peter     Jay       345       B
2   3  Donald    Hook       123       A
3   4     Jay  Donald       345       B
4   5     Jay  Donald       123       A

编辑:我想你可以用自定义函数来filtering

def f(x):
    print (x)
    mask = x.fname.isin(x.sname) | x.sname.isin(x.fname) & (len(x) > 1)
    x1 = x[mask]
    return x1


df2 = df.groupby(['landline','address']).apply(f).reset_index(drop=True)
print (df2)
   No   fname   sname  landline address
0   3  Donald    Hook       123       A
1   5     Jay  Donald       123       A
2   2   Peter     Jay       345       B
3   4     Jay  Donald       345       B

相关问题 更多 >

    热门问题