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

如何用Python或R自动拆分表格列并生成统计1数量的新表

Python 实现方案

核心逻辑:按列名中___分割出前缀(新表名)和后缀(新表列名),对每个前缀分组,统计原列中1的出现次数并构建新表。

import pandas as pd

# 筛选所有包含"___"的目标列
target_cols = [col for col in df.columns if '___' in col]

# 用字典存储生成的新表
result_tables = {}

for col in target_cols:
    # 仅分割一次,避免前缀中的下划线被拆分
    prefix, suffix = col.split('___', 1)
    
    # 初始化新表(如果不存在)
    if prefix not in result_tables:
        result_tables[prefix] = pd.DataFrame(index=df.index)
    
    # 统计当前列中每行1的出现次数:兼容单个值或列表/元组格式
    def count_ones(x):
        if isinstance(x, (list, tuple)):
            return x.count(1)
        return 1 if x == 1 else 0
    
    result_tables[prefix][suffix] = df[col].apply(count_ones)

使用时直接通过字典键调用新表,比如result_tables['survey_answer_1']就是拆分后的目标表格。

R 实现方案

用tidyverse工具链处理,更适配数据框的分组与格式转换:

library(tidyverse)

# 筛选目标列
target_cols <- df %>% select(contains("___")) %>% colnames()

# 转换为长格式并拆分列名
long_df <- df %>%
  select(all_of(target_cols)) %>%
  pivot_longer(everything(), names_to = "col_name", values_to = "value") %>%
  separate(col_name, into = c("prefix", "suffix"), sep = "___", extra = "merge")

# 统计1的次数并拆分出各个新表
result_tables <- long_df %>%
  mutate(
    count_1 = case_when(
      is.list(value) ~ sapply(value, \(x) sum(x == 1)),
      value == 1 ~ 1,
      TRUE ~ 0
    )
  ) %>%
  pivot_wider(names_from = suffix, values_from = count_1) %>%
  group_split(prefix, .keep = FALSE) %>%
  set_names(unique(long_df$prefix))

生成的result_tables是命名列表,比如result_tables[["survey_answer_1"]]对应拆分后的表格。

你之前踩坑的可能原因

  • 使用split('___')未限制分割次数:如果前缀本身包含下划线(比如survey_answer_1),会被拆成多个片段,导致前缀识别错误,必须用split('___', 1)(Python)或separate(..., extra = "merge")(R)确保仅拆分一次。
  • 字典初始化或列赋值逻辑错误:比如没有保留原数据的索引,或者未正确处理不同数据类型的1的统计(比如列表中的1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:10:33