查找两列之间的唯一值

2024-09-28 05:26:23 发布

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

我一直在考虑各种各样的问题,但没有找到一个适合这个案例的

我有两个关于电子邮件的专栏。第一列(CollectedE)由32000组成,第二列(UndE)由14987组成

我需要在第二列中找到所有电子邮件,第一列中不存在这些电子邮件,然后将它们输出到一个全新的列中

我尝试过类似的方法,但由于列中有两个不同的长度,因此不起作用

import pandas as pd
import numpy as np
df = pd.read_csv('data.csv', delimiter=";")

df['is_dup'] = df[['CollectedE', 'UndE']].duplicated()
df['dups'] = df.groupby(['CollectedE', 'UndE']).is_dup.transform(np.sum)
# df outputs:
df['is_dup'] =[![enter image description here][1]][1] df[['CollectedE', 'UndE']].duplicated()
df['dups'] = df.groupby(['CollectedE', 'UndE'])

df

这是两列的图片,如果有帮助的话。但似乎所有其他情况都是关于删除一列中的重复项、删除具有相同值的行、查找频率或类似值

enter image description here

但我希望你能帮忙。谢谢大家!


Tags: csvimportdfis电子邮件asnp案例
3条回答

也许^{}可以帮你

下面是一个使用索引差异方法和合并的工作示例

df = pd.DataFrame({'column_a':['cat','dog','bird','fish','zebra','snake'],
               'column_b':['leopard','snake','bird','sloth','elephant','dolphin']})

idx1 = pd.Index(df['column_a'])
idx2 = pd.Index(df['column_b'])

x = pd.Series(idx2.difference(idx1), name='non_matching_values')

df.merge(x, how='left', left_on='column_b', right_on=x.values)

column_a    column_b    non_matching_values
0   cat leopard leopard
1   dog snake   NaN
2   bird    bird    NaN
3   fish    sloth   sloth
4   zebra   elephant    elephant
5   snake   dolphin dolphin

您可以使用isin来反转操作,这对于~非常简单

df = pd.DataFrame({'CollectedE' : ['abc@gmail.com','random@google.com'],
             'UndE' : ['abc@gmail.com','unique@googlemail.com']})

df['new_col'] = df[~df['CollectedE'].isin(df['UndE'])]['UndE']

print(df)
          CollectedE                   UndE                new_col
0      abc@gmail.com          abc@gmail.com                    NaN
1  random@google.com  unique@googlemail.com  unique@googlemail.com

相关问题 更多 >

    热门问题