You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何按天和按小时对情感列执行多数投票统计

实现步骤

1. 修正数据集复现代码

你提供的原始复现代码存在语法错误,修正后可直接运行的版本如下:

import pandas as pd

df = pd.DataFrame({
    'tweet_text': ['tweet1', 'tweet2', 'tweet3', 'tweet4', 'tweet5', 'tweet6', 'tweet7', 'tweet8', 'tweet9', 'tweet10'], 
    'date': ['2021-08-16', '2021-08-16', '2021-08-16', '2021-08-16', '2021-08-16', '2021-08-17', '2021-08-17', '2021:08:17', '2021:08:17', '2021:08:17'], 
    'time': ['11:53:37', '02:44:04', '02:44:02', '02:47:02', '02:50:00', '05:20:46', '06:01:00', '06:20:00', '07:05:00', '07:20:21'], 
    'sentiments': ['positive', 'neutral', 'neutral', 'neutral', 'negative', 'positive', 'positive', 'positive', 'negative', 'negative']
})

2. 数据预处理

原始数据中date列存在2021:08:17这类格式不统一的问题,同时需要提取小时维度,先做格式转换:

# 统一日期格式,转换为标准日期类型
df['date'] = df['date'].str.replace(':', '-').astype('datetime64[ns]').dt.date
# 提取小时,生成HH:00格式的小时列
df['Hour'] = pd.to_datetime(df['time']).dt.strftime('%H:00')

3. 按天统计多数情感

核心逻辑是按日期分组后,对sentiments列取众数,iloc[0]用于处理平票场景,默认取第一个出现的众数:

df_daily = df.groupby('date')['sentiments']\
             .agg(lambda x: x.mode().iloc[0])\
             .reset_index(name='Majority_Sentiment')

运行后输出的df_daily和你要求的按天统计结果完全一致。

4. 按日期+小时统计多数情感

按两个维度分组后执行相同的众数计算逻辑即可:

df_hourly = df.groupby(['date', 'Hour'])['sentiments']\
              .agg(lambda x: x.mode().iloc[0])\
              .reset_index(name='Majority_Sentiment')

运行后输出的df_hourly和你要求的按小时统计结果完全一致。

注:如果需要自定义平票时的取值规则,比如返回全部众数、或者按优先级取特定类别,修改lambda里的取值逻辑即可。

内容的提问来源于stack exchange,提问作者Woox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:48:00