python - 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()
解决方案
用于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 - 我的 VS Code 不遵守自动格式化的 PEP8 行限制
- python - 有没有办法让 set 消耗更少的内存?
- r - geom_ribbon 分类填充像两条单独的丝带一样工作
- ruby-on-rails - 我正在尝试在 Rails 上安装 ruby,但它告诉我我还没有安装 gem byebug 11.0.1 但我已经安装了?
- c# - Swagger codegen - 更改 API 类名称的生成方式
- git - 如何通过在 Flutter 中运行集成测试来解决此问题?
- postgresql - 如何检查所选列的任何行中是否存在记录?
- python - 如何删除csv文件中烦人的数据
- arrays - 两个排序数组的第 K 个元素
- wordpress - Wordpress 页面更新未在全球发布