Pandas实现多行值复制填充至后续列的方法咨询
pandas实现方案
首先提供可复现的原始DataFrame构造代码:
import pandas as pd import numpy as np # 构造符合你描述的原始数据 df = pd.DataFrame([ [1, 2, 3, np.nan, np.nan, np.nan], [4, 5, 6, np.nan, np.nan, np.nan] ], columns=['A', 'B', 'C', 'D', 'E', 'F'])
方案1:固定行数场景直接赋值(无转置,性能最优)
仅需两行代码即可完成,完全符合你「不转置仅复制值到对应列」的要求:
# 将第二行A-C列的值直接赋值给第一行D-F列 df.loc[0, ['D', 'E', 'F']] = df.loc[1, ['A', 'B', 'C']].values # 提取第一行即为结果 result = df.head(1)
优势:逻辑直观,无额外计算开销,不需要修改数据结构。
方案2:通用多场景适配(行数、列分组规则可变也支持)
如果后续行数增加、或者每行列分组大小变化,可以用通用逻辑处理:
group_col_num = 3 # 每行对应填充的列数,此处是A-C共3列 for row_idx in range(1, len(df)): # 计算当前行要填充到第一行的起始列位置 start_col_pos = row_idx * group_col_num # 按位置批量赋值 df.loc[0, df.columns[start_col_pos:start_col_pos+group_col_num]] = df.loc[row_idx, df.columns[:group_col_num]].values result = df.head(1)
优势:扩展性强,不需要手动写死列名,适配任意行数的同需求场景。
方案3:无侵入实现(不修改原始DataFrame)
如果需要保留原始数据完全不变,可以直接构造新的结果DataFrame:
result = pd.DataFrame([{ 'A': df.loc[0, 'A'], 'B': df.loc[0, 'B'], 'C': df.loc[0, 'C'], 'D': df.loc[1, 'A'], 'E': df.loc[1, 'B'], 'F': df.loc[1, 'C'] }])
优势:完全不改动原始数据,避免误操作风险。
内容的提问来源于stack exchange,提问作者Asif Ahmed Neloy
相关产品推荐
相关产品推荐

