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

如何用含重复次数的DataFrame高效填充另一DataFrame的缺失值?

高效填充方案(替代嵌套循环)

思路说明

核心是用Pandas向量化操作替代循环:先将df2按Repeat列展开为对应次数的行,再通过组内序号匹配df1中同Group的待填充行,最终完成NaN值填充。

代码实现

import pandas as pd

# 原始数据
df1 = pd.DataFrame({'Group': ['xx', 'yy', 'zz', 'x', 'x', 'x','z','y','y','y','y'], 'Name': ['A', 'B', 'C', None, None, None, None, None, None, None, None], 'Value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]})
df2 = pd.DataFrame({'Name': ['A', 'A', 'B', 'B'], 'Group': ['x', 'y', 'z', 'y'], 'Repeat': [3, 2, 1, 2]})

# 1. 将df2按Repeat列展开,生成对应次数的行
expanded_df2 = df2.loc[df2.index.repeat(df2['Repeat'])]
# 2. 给每个Group的展开数据添加组内序号,用于匹配df1同组行
expanded_df2['idx'] = expanded_df2.groupby('Group').cumcount()

# 3. 给df1待填充行添加组内序号
df1['idx'] = df1.groupby('Group').cumcount()
# 4. 通过Group和idx匹配,填充Name列的NaN值
df1['Name'] = df1['Name'].fillna(
    df1.merge(expanded_df2, on=['Group', 'idx'], how='left')['Name_y']
)

# 清理临时列
df1 = df1.drop('idx', axis=1)

print(df1)

结果验证

运行后得到的目标DataFrame:

Group Name  Value
0     xx    A      1
1     yy    B      2
2     zz    C      3
3      x    A      4
4      x    A      5
5      x    A      6
6      z    B      7
7      y    A      8
8      y    A      9
9      y    B     10
10     y    B     11

效率优势

全程使用Pandas内置向量化方法(repeat、groupby.cumcount、merge),规避Python层面循环,处理大数据量时性能提升明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:37:14