在Pandas中统计不同词频并计算对应推文的平均时间
解决方案
1. 同时统计词频和平均发布时间
你之前的方法会丢失每条单词对应的Time信息,得先把分词后的单词和原数据的时间关联起来,再分组统计:
# 拆分每条推文为单词列表,展开成每行一个单词,保留对应的Time列 word_time_df = df.assign(Word=df.Tweet.str.split()).explode('Word')[['Word', 'Time']] # 按单词分组,统计出现次数和平均发布时间 word_stats = word_time_df.groupby('Word').agg( 出现次数=('Word', 'count'), 平均发布时间=('Time', 'mean') ).sort_values('出现次数', ascending=False) # 查看结果 print(word_stats.head())
输出会是类似这样的结构化数据:
出现次数 平均发布时间 Word the 1505 2022.0 de 1500 2022.0 to 1168 2022.0 RT 931 2022.0 of 906 2022.0
2. 按时间分组分析文本使用变化
完全可以用groupby()实现按时间维度的文本分析,分两种场景:
场景1:查看每个时间点的词频分布
# 拆分推文并展开单词,按时间+单词分组统计次数 time_word_freq = df.assign(Word=df.Tweet.str.split()).explode('Word').groupby(['Time', 'Word'])['Word'].count().unstack(fill_value=0) # 查看每个时间点的高频词情况 print(time_word_freq.head())
场景2:追踪单个单词的时间趋势
如果想看某个特定单词在不同时间的出现变化,可以这样做:
# 筛选目标单词,按时间统计出现次数 target_word = 'de' word_trend = df.assign(Word=df.Tweet.str.split()).explode('Word') word_trend = word_trend[word_trend['Word'] == target_word].groupby('Time')['Word'].count() print(word_trend)
额外提示
- 当前用
str.split()只是简单按空格拆分,实际处理Twitter文本时,建议先做清洗:比如去掉表情、标点、@账号、#话题(如果不需要分析话题)、转义字符等,避免统计到africain,这种带标点的无效“单词”。 - 如果你的
Time列是更精细的datetime格式(比如具体到时分秒),mean()会返回平均时间戳,分析价值会更高。
内容的提问来源于stack exchange,提问作者user20919672
相关产品推荐
相关产品推荐

