首页 > 解决方案 > Pandas:基于 pandas 列中匹配子字符串的 Groupby

问题描述

我有一个列表,其中包含以下元素:

emails= ['xyz.com', 'abc.com','def.com']

现在,我有一个如下所示的数据框:

东风:

UserID    Email_Address
U001      u001@abc.com
U002      u002@xyz.com
U003      u003@xyz.com
U004      u004@abc.com
U004      u005@def.com
U006      u006@def.com
U007      u007@def.com

我想根据子字符串对 groupby 执行计数,其中子字符串是列表中的元素。

因此,输出应如下所示:

abc.com     2
def.com     3
xyz.com     2

我当前的代码:

for domain in list1:
    count = df.groupby( [df.Email_Address.str.find(domain)]).sum()

标签: pythonpandasdataframegroup-by

解决方案


用于Series.str.extract通过列表获取值并通过聚合GroupBy.size

pat = '|'.join(emails)
s = df['Email_Address'].str.extract('('+ pat + ')', expand=False)
df1 = df.groupby(s).size().reset_index(name='Count')
print (df1)
  Email_Address  Count
0       abc.com      2
1       def.com      3
2       xyz.com      2

推荐阅读