首页 > 解决方案 > Python:计算共享同一电子邮件的不同用户 ID - Pandas 数据操作

问题描述

我想返回一个数据框,该数据框仅显示User_ID与其关联的电子邮件超过 1 个的行。换句话说,我试图计算有多少不同的用户 ID 共享一封电子邮件 - 见下文

样本数据

   Unnamed: 0    First Name  ... User_ID                      Email
0           0           Bob  ...             2011              Bob@email
1           1          Dirk  ...             2012              jack@email
2           2         Sarah  ...             2013              Sara@email
3           3           max  ...             2015              Bob@email
4           4           leo  ...             2016              Sara@email

从上表中,我想要的结果将是这样的(注意我会将 Value Counts 删除小于 0,因为我只对具有

输出

User_ID   (Count of other User_Ids with same Domain) 
2011       1 
2012       0 
2013       1      
2015       1
2016       1

在 SQL 中,这将像下面这样工作,我将获得所有用户 ID 的输出,这些用户 ID 的计数大于 1 个不同的关联电子邮件。有人可以建议我如何在 python 中做类似的事情吗?

SELECT User_ID, COUNT(EMAILS) AS Count
FROM dataframe
HAVING Count > 1

在 python 中,我尝试利用 value_counts 函数执行以下操作,但不知道如何使其输出上面所需的输出

df = pd.read_csv("data.csv")
#print( df['Email'].value_counts() > 1)
emailList = list(df["Email"].value_counts())
 
duplicates = df[df['Email'].duplicated(keep=False)]
print(duplicates.value_counts())

标签: pythonpandas

解决方案


你在追求吗

df.groupby('Email')['FirstName'].value_counts()

如果您想过滤超过 1 个名称的电子邮件。请试试

df[df.groupby('Email')['FirstName'].transform(lambda x: x.count().sum()).gt(1)]

或者

 df.groupby('Email')['FirstName'].agg(list).to_frame('names')



                 names
Email                   
Bob@email     [Bob, max]
Sara@email  [Sarah, leo]
jack@email        [Dirk]

推荐阅读