我有一个包含以下元素的列表:
emails= ['xyz.com', 'abc.com','def.com']
现在,我有一个如下所示的数据框:
df:
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()
最佳答案
使用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
关于python - Pandas:基于 pandas 列中匹配子字符串的 Groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001289/