如何在Pandas DataFrame中按行统计唯一Hashtag的出现行数?
解决按行去重统计Hashtag出现行数的问题
没问题,我来帮你搞定这个需求!你原来的代码统计的是所有Hashtag的总出现次数(包括同一行重复的),而你需要的是每个Hashtag在多少不同的行中出现,这就需要先对每行的标签去重,再统计。
具体解决方案
这里有个直观的实现方式,分两步走:
- 提取每行的所有唯一Hashtag(去掉同一行内的重复标签)
- 将这些行级的唯一标签展开,再统计每个标签出现的行数
代码如下:
import pandas as pd # 你的示例数据 data = {'Posts': [ "This is an example #tag1", "This too is an example #tag1 #tag2", "Yup, still an example #tag1 #tag1 #tag3" ]} df = pd.DataFrame(data) # 第一步:提取每行的唯一Hashtag unique_tags_per_row = df['Posts'].str.findall(r'#\w+').apply(set).apply(list) # 第二步:展开并统计行数 count_hashtags_by_row = unique_tags_per_row.explode().value_counts() print(count_hashtags_by_row)
输出结果
运行后你会得到想要的统计:
#tag1 3 #tag2 1 #tag3 1 dtype: int64
代码解释
str.findall(r'#\w+'):从每行文本中提取所有符合格式的Hashtag,返回一个包含标签的列表.apply(set):把每行的标签列表转成集合,自动去除同一行内的重复标签.apply(list):把集合转回列表,方便后续的explode操作.explode():将每行的标签列表拆分成单独的行,每个标签占一行.value_counts():统计每个标签在不同行中出现的次数
如果你想更简洁,也可以把代码合并成一行:
count_hashtags_by_row = df['Posts'].str.findall(r'#\w+')\ .apply(lambda x: pd.Series(x).unique())\ .explode()\ .value_counts()
这样就能完美得到你需要的按行去重后的Hashtag统计结果啦!
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

