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

基于双ID列的for循环实现:汇总统计输出与数据框存储问题

解决嵌套循环生成分组描述统计的问题

嘿,我懂你现在的困惑——要通过嵌套循环按「国家(i)+行业(j)」两层分组,把每个子组的描述统计结果存入新数据框对吧?我给你用R和Python分别写了示例代码,完全贴合你的需求,一起来看看:


R语言实现方案

思路拆解

  1. 先提取数据中唯一的国家和行业列表,作为循环的迭代对象
  2. 初始化一个空的结果数据框,用来存储后续的统计结果
  3. 外层循环遍历每个国家,内层循环遍历每个行业,筛选对应子组的数据
  4. 计算该子组的描述统计,把结果追加到空数据框中
  5. 跳过没有数据的子组,避免计算报错

代码示例

# 先模拟和你类似的40条样本数据
set.seed(123)
df <- data.frame(
  国家 = sample(c("中国", "美国", "德国"), 40, replace = TRUE),
  行业 = sample(c("制造业", "服务业", "金融业"), 40, replace = TRUE),
  营收 = rnorm(40, mean = 100, sd = 20),
  利润 = rnorm(40, mean = 15, sd = 5)
)

# 获取唯一的国家、行业列表(用seq_along比1:m更灵活,适配长度变化)
unique_countries <- unique(df$国家)
unique_industries <- unique(df$行业)

# 初始化空的结果数据框,定义好列名和数据类型
summary_df <- data.frame(
  国家 = character(),
  行业 = character(),
  营收均值 = numeric(),
  营收中位数 = numeric(),
  利润均值 = numeric(),
  利润标准差 = numeric(),
  stringsAsFactors = FALSE
)

# 嵌套循环处理每个国家-行业子组
for (i in seq_along(unique_countries)) {
  current_country <- unique_countries[i]
  # 筛选当前国家的所有数据
  country_data <- df[df$国家 == current_country, ]
  
  for (j in seq_along(unique_industries)) {
    current_industry <- unique_industries[j]
    # 筛选当前国家+行业的子组数据
    group_data <- country_data[country_data$行业 == current_industry, ]
    
    # 跳过没有数据的子组,避免mean/sd计算报错
    if (nrow(group_data) == 0) next
    
    # 计算需要的描述统计量
    stats <- list(
      国家 = current_country,
      行业 = current_industry,
      营收均值 = mean(group_data$营收),
      营收中位数 = median(group_data$营收),
      利润均值 = mean(group_data$利润),
      利润标准差 = sd(group_data$利润)
    )
    
    # 将统计结果追加到结果数据框
    summary_df <- rbind(summary_df, as.data.frame(stats))
  }
}

# 查看最终结果
print(summary_df)

Python语言实现方案

思路拆解

和R的逻辑一致,只是Python里用列表存储中间结果会比直接追加DataFrame更高效,最后再转换为DataFrame。

代码示例

import pandas as pd
import numpy as np

# 模拟40条样本数据
np.random.seed(123)
df = pd.DataFrame({
    '国家': np.random.choice(['中国', '美国', '德国'], 40),
    '行业': np.random.choice(['制造业', '服务业', '金融业'], 40),
    '营收': np.random.normal(100, 20, 40),
    '利润': np.random.normal(15, 5, 40)
})

# 获取唯一的国家、行业列表
unique_countries = df['国家'].unique()
unique_industries = df['行业'].unique()

# 用列表存储中间统计结果(比直接追加DataFrame更高效)
summary_list = []

# 嵌套循环处理每个子组
for country in unique_countries:
    country_data = df[df['国家'] == country]
    for industry in unique_industries:
        group_data = country_data[country_data['行业'] == industry]
        # 跳过空数据组
        if group_data.empty:
            continue
        # 计算描述统计
        stats = {
            '国家': country,
            '行业': industry,
            '营收均值': group_data['营收'].mean(),
            '营收中位数': group_data['营收'].median(),
            '利润均值': group_data['利润'].mean(),
            '利润标准差': group_data['利润'].std()
        }
        summary_list.append(stats)

# 转换为最终的结果DataFrame
summary_df = pd.DataFrame(summary_list)
print(summary_df)

额外小提示

其实不用循环也能高效实现这个需求:

  • R里可以用dplyr包的group_by(国家, 行业) %>% summarise(...)
  • Python里可以用df.groupby(['国家', '行业']).agg(...)
    但既然你要练习for循环的写法,上面的代码完全能满足你的需求哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:36:29