如何便捷地在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
相关产品推荐
相关产品推荐

