python - 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())
解决方案
你在追求吗
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]
推荐阅读
- r - 根据 data.frame 中每组的 xy 坐标计算斜率
- python-3.x - 如何从python中的二维列表中选择一些在第0位具有相同值的项目
- android - 如果 ArrayList 中存在世界,Android SQLite 忽略添加
- java - 将 jdk 源代码添加到我现有的 Java EE Eclipse (Photon)
- java - android显示后如何在自定义对话框中更改视图的可见性
- html - 仅当前一个文件输入不为空时才显示文件输入
- postgresql - 如何连接两个表并创建新列?
- c# - c#中lineInfo不等于多个字符串怎么办?
- javascript - 如何在 Vue JS 2.+ 中使用自定义事件
- java - 如何在一定的行长后转到新行?