为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Pandas 中搜索 A 列中的单词并根据 B 列进行计数?

如何在 Pandas 中搜索 A 列中的单词并根据 B 列进行计数?

翻阅古今 2022-07-26 21:44:16
我有基于文本、日期和作者的数据框,如下所示:TEXT               Author               DateThis is a Cat       Jane                 1.01.1997This is a Dog       Sara                 1.02.2009I have a cat        Lesner               5.07.2001所以,我想写一个这样的脚本:例如,我想搜索单词“Cat”,然后它应该根据 Date 列计算“Cat”:输出应如下所示:Date        count1.01.1997    11.02.2009    05.07.2001    1
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

与忽略小写和大写一起使用Series.str.count,但也是计数单词,例如cation,locate因为包含子字符串cat:


import re


df['count'] = df['TEXT'].str.count('cat', flags=re.I)

为了防止计数子串,可以添加单词边界\b\b:


df['count'] = df['TEXT'].str.count(r'\bcat\b', flags=re.I)

print (df)

            TEXT  Author       Date  count

0  This is a Cat    Jane  1.01.1997      1

1  This is a Dog    Sara  1.02.2009      0

2   I have a cat  Lesner  5.07.2001      1

最后按列列表过滤:


df1 = df[['Date','count']]

print (df1)

        Date  count

0  1.01.1997      1

1  1.02.2009      0

2  5.07.2001      1

编辑:


我只是好奇我们是否可以计算“nunique”,因为例如如果 cat 在句子中出现两次,那么它将计为 2,但我只需要检查“Cat”这个词是否可用。因此,输出应为 0 或 1。


然后更好地使用Series.str.contains并转换为整数True->1和False->0映射:


df['exist'] = df['TEXT'].str.contains(r'\bcat\b', flags=re.I).astype(int)

print (df)


            TEXT  Author       Date  exist

0  This is a Cat    Jane  1.01.1997      1

1  This is a Dog    Sara  1.02.2009      0

2   I have a cat  Lesner  5.07.2001      1

如果需要两列都可以使用Series.clip:


df['count'] = df['TEXT'].str.count('cat', flags=re.I)

df['exist'] = df['count'].clip(upper=1)


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信