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

如何根据数据框名称匹配生成含对应age值的新数据框?

解决方案

R语言实现

  1. 将单独的dataframe存入命名列表,建立名称与数据的对应关系
# 把已有的jack、ethan、ellie放入命名列表
name_dfs <- list(jack = jack, ethan = ethan, ellie = ellie)
  1. 批量处理每个dataframe,提取性别对应的年龄并整理成统一格式
library(dplyr)

# 遍历列表生成汇总表
summary_df <- lapply(names(name_dfs), function(nm) {
  current_df <- name_dfs[[nm]]
  # 提取男性年龄,无匹配则设为0
  sexM <- ifelse(any(current_df$sex == "M"), current_df$age[current_df$sex == "M"], 0)
  # 提取女性年龄,无匹配则设为0
  sexF <- ifelse(any(current_df$sex == "F"), current_df$age[current_df$sex == "F"], 0)
  data.frame(name = nm, sexM = sexM, sexF = sexF)
}) %>% bind_rows()
  1. 与mydf左连接,将未匹配项的NA替换为0
result_df <- mydf %>%
  left_join(summary_df, by = "name") %>%
  mutate(across(c(sexM, sexF), ~replace(., is.na(.), 0)))

Python Pandas实现

  1. 将单独的DataFrame存入字典,以名称为键
import pandas as pd

# 把已有的jack、ethan、ellie放入字典
name_dfs = {"jack": jack, "ethan": ethan, "ellie": ellie}
  1. 遍历字典生成性别年龄汇总表
summary_data = []
for name, df in name_dfs.items():
    # 获取男性年龄,无匹配则为0
    sexM = df.loc[df["sex"] == "M", "age"].iloc[0] if not df[df["sex"] == "M"].empty else 0
    # 获取女性年龄,无匹配则为0
    sexF = df.loc[df["sex"] == "F", "age"].iloc[0] if not df[df["sex"] == "F"].empty else 0
    summary_data.append({"name": name, "sexM": sexM, "sexF": sexF})

summary_df = pd.DataFrame(summary_data)
  1. 合并mydf与汇总表,填充未匹配项为0
result_df = mydf.merge(summary_df, on="name", how="left").fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:09:19