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

R语言如何按分组计算数据框指定行的价格与成交量平均值

实现方案

下面是两种主流数据分析工具的简便实现方式,你之前用head仅返回第一个分组结果,是因为没有将计算逻辑作用到每个分组的独立上下文里,按下方写法即可得到目标结构的结果:

Python Pandas 实现

import pandas as pd

# 假设原始数据框命名为 df
stat_result = df.groupby('Stock').apply(
    lambda group: pd.Series({
        'Pr/3D/Avg': group[group['Day'] <= 3]['Price'].mean(),
        'Pr/5D/Avg': group[group['Day'] <= 5]['Price'].mean(),
        'Pr/20D/Avg': group[(group['Day'] >=5) & (group['Day'] <=25)]['Price'].mean(),
        'Vo/3D/Avg': group[group['Day'] <= 3]['Volume'].mean(),
        'Vo/5D/Avg': group[group['Day'] <= 5]['Volume'].mean(),
        'Vo/20D/Avg': group[(group['Day'] >=5) & (group['Day'] <=25)]['Volume'].mean()
    })
).reset_index()

如果每个股票分组的Day已经按升序排好,还可以用位置索引优化性能:

stat_result = df.groupby('Stock').apply(
    lambda group: pd.Series({
        'Pr/3D/Avg': group['Price'].head(3).mean(),
        'Pr/5D/Avg': group['Price'].head(5).mean(),
        'Pr/20D/Avg': group['Price'].iloc[4:].mean(), # 索引从0开始,第4位对应第5天
        'Vo/3D/Avg': group['Volume'].head(3).mean(),
        'Vo/5D/Avg': group['Volume'].head(5).mean(),
        'Vo/20D/Avg': group['Volume'].iloc[4:].mean()
    })
).reset_index()

R dplyr 实现

library(dplyr)

# 假设原始数据框命名为 df
stat_result <- df %>%
  group_by(Stock) %>%
  summarise(
    `Pr/3D/Avg` = mean(Price[Day <= 3]),
    `Pr/5D/Avg` = mean(Price[Day <= 5]),
    `Pr/20D/Avg` = mean(Price[Day >=5 & Day <=25]),
    `Vo/3D/Avg` = mean(Volume[Day <= 3]),
    `Vo/5D/Avg` = mean(Volume[Day <= 5]),
    `Vo/20D/Avg` = mean(Volume[Day >=5 & Day <=25])
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:24:06