Pandas:如何使用enumerate循环更新多列?
批量基于现有列生成新DataFrame列的实现方案
没问题,我来帮你搞定这个批量生成列的需求!先看看你的初始DataFrame:
import pandas as pd # 你的初始DataFrame df = pd.DataFrame({ 'name': ['a', 'b', 'c'], 'count1': [1, 2, 3], 'count2': [2, 4, 6] })
你需要批量生成count3(count1 * 10)和count4(count2 * 10²),还要避免手动逐个写列赋值,同时直接在原DataFrame上修改,下面给你两种实用的方案:
方案1:自定义规则循环生成
如果你的新列和原始列的对应关系固定(比如哪列对应哪个乘数),可以先定义规则列表,再循环处理,完美适配批量操作:
# 定义生成规则:(原始列名, 新列名, 乘数) column_rules = [ ('count1', 'count3', 10**1), ('count2', 'count4', 10**2) ] # 循环批量生成新列,直接在原DataFrame上修改(类似inplace=True的效果) for orig_col, new_col, multiplier in column_rules: df[new_col] = df[orig_col] * multiplier
这种方式灵活性拉满,后续不管要加多少列,只需要在column_rules里添加对应规则行就行,不用重复写赋值逻辑。
方案2:自动匹配规则生成(适合列数量多的场景)
如果你的原始列都是countX格式,新列按顺序生成count(X+N)(N是原始count列的数量),乘数是10的对应次方,那可以自动生成规则,完全不用手动列出来:
# 先筛选出所有原始的count开头的列 orig_count_cols = [col for col in df.columns if col.startswith('count')] # 获取原始count列的数量 orig_col_num = len(orig_count_cols) # 循环自动生成新列 for idx, orig_col in enumerate(orig_count_cols, start=1): # 新列名:count + (原始列数量 + 当前索引) new_col_name = f'count{orig_col_num + idx}' # 乘数:10的当前索引次方 multiplier = 10 ** idx # 赋值生成新列 df[new_col_name] = df[orig_col] * multiplier
运行任意一种方案后,你的DataFrame就会变成想要的样子:
name count1 count2 count3 count4 0 a 1 2 10 200 1 b 2 4 20 400 2 c 3 6 30 600
两种方案都是直接在原DataFrame上添加新列,不需要创建新对象,完全符合你要的类似inplace=True的效果。
内容的提问来源于stack exchange,提问作者Primer4662
相关产品推荐
相关产品推荐

