如何从多列DataFrame提取以GG开头的值并生成新DataFrame?
R 解决方案
可以借助dplyr和stringr包快速实现需求,步骤如下:
library(dplyr) library(stringr) # 构造示例数据(和你提供的结构一致) df <- tibble( Symbol = c("LOC6540581", "LOC6541346", "LOC6548272"), X = c("Adh", "eve", "amy"), X.1 = c("Adh-PA", "CG2328", "Amy-p"), X.2 = c("GG25120", "eve-PA", "GG22216"), X.3 = c("Dere\\Adh", "GG24126", "Amy-p-PA"), X.4 = c("GG25120-PA", "Dere\\eve", "Dere\\Amy-p"), X.5 = c(NA, "CG2328-PA", "GG22216-PA"), X.6 = c(NA, "GG24126-PA", NA), X.7 = rep(NA, 3), X.8 = rep(NA, 3), X.9 = rep(NA, 3), X.10 = rep(NA, 3), X.11 = rep(NA, 3), X.12 = rep(NA, 3), X.13 = rep(NA, 3), X.14 = rep(NA, 3), X.15 = rep(NA, 3), X.16 = rep(NA, 3) ) # 提取目标数据 result <- df %>% rowwise() %>% # 筛选当前行中以GG开头的字符串,取第一个匹配值 mutate(X = str_subset(c_across(X:X.16), "^GG")[[1]]) %>% ungroup() %>% select(Symbol, X) print(result)
输出结果:
# A tibble: 3 × 2 Symbol X <chr> <chr> 1 LOC6540581 GG25120 2 LOC6541346 GG24126 3 LOC6548272 GG22216
Python 解决方案
用Pandas的行遍历和字符串匹配功能实现:
import pandas as pd import numpy as np # 构造示例数据 data = { "Symbol": ["LOC6540581", "LOC6541346", "LOC6548272"], "X": ["Adh", "eve", "amy"], "X.1": ["Adh-PA", "CG2328", "Amy-p"], "X.2": ["GG25120", "eve-PA", "GG22216"], "X.3": ["Dere\\Adh", "GG24126", "Amy-p-PA"], "X.4": ["GG25120-PA", "Dere\\eve", "Dere\\Amy-p"], "X.5": [np.nan, "CG2328-PA", "GG22216-PA"], "X.6": [np.nan, "GG24126-PA", np.nan], "X.7": [np.nan]*3, "X.8": [np.nan]*3, "X.9": [np.nan]*3, "X.10": [np.nan]*3, "X.11": [np.nan]*3, "X.12": [np.nan]*3, "X.13": [np.nan]*3, "X.14": [np.nan]*3, "X.15": [np.nan]*3, "X.16": [np.nan]*3 } df = pd.DataFrame(data) # 定义函数:提取每行中以GG开头的第一个值 def get_gg_value(row): gg_items = [val for val in row if isinstance(val, str) and val.startswith("GG")] return gg_items[0] if gg_items else np.nan # 应用函数并生成结果 df["X"] = df.drop("Symbol", axis=1).apply(get_gg_value, axis=1) result = df[["Symbol", "X"]] print(result)
输出结果:
Symbol X 0 LOC6540581 GG25120 1 LOC6541346 GG24126 2 LOC6548272 GG22216
内容的提问来源于stack exchange,提问作者AvolaAMG
相关产品推荐
相关产品推荐

