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

R语言DataFrame条件平均、分组与排序实现问题

解决方案

1. 定义年份区间标签

先给每个年份匹配对应的区间分组,用pd.cut快速实现:

import pandas as pd

# 定义年份区间边界和对应标签
year_bins = [1979, 1990, 2001, 2007, 2020]
year_labels = ['1980-1990', '1991-2001', '2002-2007', '2008-2020']

# 为原DataFrame添加区间标签列
df['year_period'] = pd.cut(df['fyear'], bins=year_bins, labels=year_labels, include_lowest=True)

2. 计算各区间及全周期的行业均值

分别计算分区间和全周期的行业指标均值,再合并结果:

# 计算分区间的行业指标均值
period_means = df.groupby(['newname', 'year_period'])[['aqcflow', 'capxflow']].mean().reset_index()

# 计算全周期的行业指标均值,添加统一标签
full_period_means = df.groupby('newname')[['aqcflow', 'capxflow']].mean().reset_index()
full_period_means['year_period'] = '全周期'

# 合并两类均值数据
all_means = pd.concat([period_means, full_period_means], ignore_index=True)

3. 转换为宽表结构

通过pivot将长表转成宽表,调整列名提升可读性:

# 转宽表:行业为行,(指标, 区间)为列
wide_df = all_means.pivot(index='newname', columns='year_period', values=['aqcflow', 'capxflow'])

# 格式化列名,比如"aqcflow_1980-1990"
wide_df.columns = ['_'.join(col) for col in wide_df.columns]
wide_df = wide_df.reset_index()

4. 按总平均值降序排序

以全周期的指标均值作为总平均值,进行排序:

# 计算各行业的总平均值(这里取全周期两个指标的均值,可按需调整)
wide_df['total_mean'] = wide_df[['aqcflow_全周期', 'capxflow_全周期']].mean(axis=1)

# 按总平均值降序排列
wide_df_sorted = wide_df.sort_values(by='total_mean', ascending=False)

常见异常排查

  • 如果出现分组错误:检查year_bins的边界是否覆盖所有年份,include_lowest=True确保1980年被正确划入第一个区间
  • 如果出现缺失值:计算均值时可添加dropna=True(默认已开启),或根据业务需求用fillna(0)填充缺失值
  • 如果pivot报错重复值:检查是否存在同一行业同一区间的重复数据,可先对原数据去重或用groupby聚合时指定更严谨的规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:45:30