在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])
最终结果
运行上述任意一种方法后,得到的结果如下:
| y | m0 | m1 | m2 | mn |
|---|---|---|---|---|
| 1 | 5 | 5 | NaN | NaN |
| 2 | 15 | 15 | 15 | NaN |
| 3 | 25 | 25 | 25 | 25 |
内容的提问来源于stack exchange,提问作者littletimmy
相关产品推荐
相关产品推荐

