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

如何在Pandas DataFrame中分组指定标签并计算同时间均值

问题描述

我需要在DataFrame的tag_name列中对指定标签分组,计算同一time下raw_data的均值,并将结果保留在DataFrame中。我的DataFrame结构如下(实际含万余行):

tag_name time raw_data
happy     5      300
          8      340
angry     5      315
          8      349
sad       5      400
          8      480
...

我尝试用透视表计算均值,但无法筛选指定标签,当前代码如下:

output = pd.pivot_table(data=dataset,index=['Timestamp'],columns=['Tag_Name'],values='Raw_Data',aggfunc='mean')

我希望计算sad和happy的均值,得到以下两种输出之一:

理想输出:

tag_name    time raw_data  sad_happy_avg
happy        5      300     350
             8      340     410
sad          5      400
             8      480
angry        5      315
             8      349

可接受输出:

tag_name   happy   sad  avg
time
5           300    400  350
8           340    480  410
解决方案

一、实现可接受输出

先筛选sad和happy的行,通过透视表整理数据后新增均值列:

# 筛选指定标签的行
filtered_df = dataset[dataset['tag_name'].isin(['sad', 'happy'])]
# 生成以time为索引、tag_name为列的透视表
pivot_df = filtered_df.pivot(index='time', columns='tag_name', values='raw_data')
# 计算每行的均值,新增avg列
pivot_df['avg'] = pivot_df[['sad', 'happy']].mean(axis=1)
# 可选:重置索引,让time成为普通列
pivot_df = pivot_df.reset_index()

执行后即可得到按time分组,包含happy、sad原始值及对应均值的结果。

二、实现理想输出

先计算每个time下sad和happy的均值,再将结果合并回原DataFrame,仅在happy行填充均值:

# 分组计算每个time对应的sad和happy均值
avg_df = dataset[dataset['tag_name'].isin(['sad', 'happy'])]\
          .groupby('time')['raw_data']\
          .mean()\
          .reset_index(name='sad_happy_avg')

# 合并均值数据到原DataFrame,仅给happy标签的行赋值均值
result_df = dataset.merge(avg_df, on='time', how='left')
result_df['sad_happy_avg'] = result_df.apply(
    lambda x: x['sad_happy_avg'] if x['tag_name'] == 'happy' else None,
    axis=1
)

处理后原DataFrame会新增sad_happy_avg列,仅happy行显示对应time的均值,其他标签行该列为空,与理想输出结构一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:10:36