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

在R语言中根据列值填充data frame指定列

解决方案

构造初始数据

首先用以下代码复现你的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'y': [1, 2, 3],
    'm0': [5, 15, 25],
    'm1': [np.nan, np.nan, np.nan],
    'm2': [np.nan, np.nan, np.nan],
    'mn': [np.nan, np.nan, np.nan]
})

方法1:逐行处理(直观易读)

通过apply逐行遍历,根据y的值确定需要填充的列:

# 筛选出m0之后的所有m开头列
m_target_cols = [col for col in df.columns if col.startswith('m') and col != 'm0']

def fill_target_cols(row):
    # 取前y个目标列进行填充
    cols_to_fill = m_target_cols[:row['y']]
    row[cols_to_fill] = row['m0']
    return row

result_df = df.apply(fill_target_cols, axis=1)

方法2:向量化处理(高效适合大数据)

利用numpy广播生成掩码,批量填充,性能更优:

m_target_cols = [col for col in df.columns if col.startswith('m') and col != 'm0']
# 生成掩码矩阵:每行前y个位置为True,其余为False
fill_mask = np.arange(len(m_target_cols)) < df['y'].values[:, np.newaxis]
# 根据掩码填充m0的值,保留其余位置的原数据
df[m_target_cols] = np.where(fill_mask, df['m0'].values[:, np.newaxis], df[m_target_cols])

最终结果

运行上述任意一种方法后,得到的结果如下:

ym0m1m2mn
155NaNNaN
2151515NaN
325252525

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:30:30