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

如何便捷地在Pandas DataFrame中生成大量新列?

在Pandas中批量生成新列的简洁方法

针对你需要批量生成大量新列、避免重复输入长DataFrame名称的需求,这里有几种和R语言transform函数逻辑类似的便捷方案:

1. 使用assign()方法(最接近R transform的体验)

assign()允许你一次性定义多个新列,通过lambda参数指代原DataFrame,彻底避免重复书写长变量名:

# 假设你的长命名DataFrame是:my_complex_named_df
my_complex_named_df = my_complex_named_df.assign(
    new_var_1=lambda x: x['var_1'] + x['var_2'],
    new_var_2=lambda x: x['var_2'] / (x['var_3'] + x['var_4']),
    new_var_3=lambda x: x['var_1'].apply(lambda val: val**2 if val > 0 else val),
    # ... 继续添加所有需要的新列
    new_var_100=lambda x: x['var_5'] * x['var_6'] + x['var_7']
)
  • 这里的lambda x中,x就代表原DataFrame,不用重复写长名称
  • assign()返回新的DataFrame,因此需要赋值回原变量(或新变量)
  • 支持复杂逻辑:包括自定义函数、条件判断、apply操作等,灵活性拉满

2. 使用eval()方法(适合简单运算场景)

如果你的新列都是简单的算术/逻辑表达式,eval()可以让你直接用列名写运算,语法极度简洁:

# 先定义所有新列的表达式字典
new_columns = {
    'new_var_1': 'var_1 + var_2',
    'new_var_2': 'var_2 / (var_3 + var_4)',
    # ... 其他列的表达式
    'new_var_100': 'var_5 * var_6'
}

# 把表达式拼接成eval可执行的字符串,批量生成列
my_complex_named_df = my_complex_named_df.eval('; '.join([f"{col} = {expr}" for col, expr in new_columns.items()]))
  • eval()在DataFrame的上下文执行,直接用列名即可,无需加df[]
  • 代码量极少,适合一次性生成大量简单运算的新列

3. 临时别名(可选辅助技巧)

如果上述方法仍觉得麻烦,还可以给长命名DataFrame先起一个短别名:

d = my_complex_named_df
d['new_var_1'] = d['var_1'] + d['var_2']
d['new_var_2'] = d['var_2'] / (d['var_3'] + d['var_4'])
# ... 批量操作后再赋值回原名称(如果需要)
my_complex_named_df = d

这种方式适合习惯原生赋值写法,但不想重复写长名称的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:33:28