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

按列对指定行数求均值:面板数据集多国家多变量时间区间均值计算

解决面板数据按国家分组计算指定时间段变量均值的问题

Hey there! 看你需要处理面板数据里按国家分组、计算指定时间段变量均值的需求,我用Python的pandas给你整两个实用方案,绝对不会出现不同国家数据混淆的情况~

先明确数据结构(你可以对应替换成自己的列)

假设你的面板数据有这些核心列:country(国家标识)、year(年份)、Var1/Var2/Var3(需要计算均值的变量)。我先生成一份示例数据,方便你对应理解:

import pandas as pd
import numpy as np

# 生成示例面板数据(你可以替换成自己的真实数据)
np.random.seed(42)
countries = ['USA', 'Canada', 'UK', 'Germany']
years = np.arange(1980, 1995)
data = pd.DataFrame({
    'country': np.repeat(countries, len(years)),
    'year': np.tile(years, len(countries)),
    'Var1': np.random.randn(len(countries)*len(years)),
    'Var2': np.random.randn(len(countries)*len(years)),
    'Var3': np.random.randn(len(countries)*len(years))
})

方案1:在原数据中新增时间段均值列

如果你想在原数据里直接给每一行加上对应国家的时间段均值(比如所有美国的行都带上1984-1988年Var1的均值),可以这么做:

第一步:定义要处理的时间窗口和变量

# 你可以自由添加/修改时间窗口,比如再加个(1990,1994)
time_windows = [(1984, 1988), (1989, 1993)]
# 指定需要计算均值的变量列表
vars_to_avg = ['Var1', 'Var2', 'Var3']

第二步:按国家分组计算并合并结果

# 遍历每个时间窗口,计算均值并合并到原数据
for start, end in time_windows:
    # 按国家分组,只筛选当前时间窗口内的数据,计算变量均值
    window_means = data.groupby('country').apply(
        lambda group: group.loc[(group['year'] >= start) & (group['year'] <= end), vars_to_avg].mean()
    ).reset_index()
    # 给均值列重命名,带上时间段标识,方便区分
    window_means.columns = ['country'] + [f'{var}_{start}-{end}_avg' for var in vars_to_avg]
    # 将结果合并回原数据(每个国家的所有行都会匹配到自己的均值)
    data = data.merge(window_means, on='country', how='left')

处理完后,原数据会新增类似Var1_1984-1988_avg的列,每个国家的均值都是独立计算的,完全不会串数据~

方案2:生成单独的均值汇总表

如果你想要一个干净的、只包含国家-时间段-均值的新DataFrame,用来做汇总分析,这个方案更合适:

# 初始化空的汇总表
summary_df = pd.DataFrame()

for start, end in time_windows:
    # 按国家分组计算当前窗口的均值
    temp_means = data.groupby('country').apply(
        lambda group: group.loc[(group['year'] >= start) & (group['year'] <= end), vars_to_avg].mean()
    ).reset_index()
    # 添加时间段标识列,方便后续区分不同窗口
    temp_means['time_window'] = f'{start}-{end}'
    # 把当前窗口的结果拼到汇总表里
    summary_df = pd.concat([summary_df, temp_means], ignore_index=True)

# 调整列顺序,让表格更直观(可选)
summary_df = summary_df[['country', 'time_window'] + vars_to_avg]

这个汇总表会清晰展示每个国家在每个时间段的各变量均值,非常适合做后续的对比分析。

核心注意事项

  • 分组是关键:全程用groupby('country')确保每个国家的计算都是独立的,从根源上避免了跨国家的数据混淆。
  • 灵活性拉满:不管你要加多少时间窗口、多少变量,只要修改time_windows和vars_to_avg这两个列表就行,核心逻辑不用动。
  • 适配其他维度:如果你的数据还有其他分组维度(比如行业、地区),只需要把groupby('country')改成groupby(['country', 'industry'])就可以兼容。

要是你用的是R语言,也可以告诉我,我再给你写对应的dplyr方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:43:42