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

如何高效循环Pandas DataFrame中的值以更新指定行?

循环复用Pandas DataFrame名称批量更新指定行

不用逐行循环,用Pandas的向量化操作就能高效解决这个问题,核心是先筛选出需要更新的行,再生成对应长度的循环名称序列批量赋值。

完整代码实现

import pandas as pd
import numpy as np

# 构造待修改的DataFrame(可替换为你的数据源)
df = pd.DataFrame({
    'Rule': [12,9,7,1,3,2,4,6,9,4,1,4,5,2,11,6,9,2,10,3,10,3,1,4,4,3,7,7,12],
    'Name': [np.nan]*29
})

# 构造Names DataFrame
names_df = pd.DataFrame({'Name': ['Adams', 'Baker', 'Clark', 'Davis']})
names_list = names_df['Name'].tolist()

# 定义需要匹配的Rule集合
target_rules = {4,5,6,10,11,12}

# 筛选出需要更新名称的行
update_mask = df['Rule'].isin(target_rules)

# 生成循环的名称序列:重复Names列表直到覆盖所有需要更新的行
total_needs_update = update_mask.sum()
cycled_names = np.tile(names_list, (total_needs_update // len(names_list)) + 1)[:total_needs_update]

# 批量赋值
df.loc[update_mask, 'Name'] = cycled_names

代码说明

  1. 筛选目标行:用isin()快速定位所有Rule属于指定集合的行,得到布尔索引update_mask。
  2. 生成循环序列:用np.tile()把Names列表重复足够多的次数,再截取到需要的长度,确保刚好覆盖所有待更新行,实现循环复用。
  3. 批量赋值:通过df.loc[mask, column]直接批量赋值,比逐行循环效率高得多,也避免了vectorize方法中因缺少计数器导致的重复同一名称问题。

为什么之前的vectorize方法失效?

numpy.vectorize()本质是对每个元素单独处理,如果没有在内部维护递增计数器来循环取Names里的元素,就会每次返回同一个值。而上面的方法直接生成完整的循环序列再批量赋值,更符合Pandas的向量化设计思路,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:47:35