Python中是否有类似R data.table :=的多列赋值简化方法
Python中R data.table
:= 多列赋值的等价实现 Python生态下有两种成熟的方案可以实现和R data.table := 运算符完全等价的一行多列赋值效果,无需逐行编写赋值语句:
1. Pandas原生assign方法(无需额外安装依赖)
Pandas内置的assign方法支持一次性批量生成/修改多个列,你的示例可以直接改写为一行逻辑:
df = df.assign( Col_A = lambda x: x.A / x.B, Col_B = lambda x: x.C / x.D, Col_C = lambda x: x.E / x.F * 1000000, Col_D = lambda x: x.G / x.H * 1000000 )
说明:assign默认返回修改后的新DataFrame,直接赋值给原变量即可覆盖旧数据。如果使用pandas 2.1.0及以上版本,可省略lambda表达式,直接引用列名运算:
df = df.assign( Col_A = df.A / df.B, Col_B = df.C / df.D, Col_C = df.E / df.F * 1000000, Col_D = df.G / df.H * 1000000 )
2. Python datatable库(完全对齐R data.table语法)
如果你更习惯R data.table的写法,可以直接安装Python官方的datatable库,语法和R端几乎完全一致,计算效率比pandas更高,原生支持原地多列赋值:
首先安装依赖:
pip install datatable
你的示例可以改写为和R端高度相似的写法:
import datatable as dt from datatable import f df[:, dt.update( Col_A = f.A / f.B, Col_B = f.C / f.D, Col_C = f.E / f.F * 1000000, Col_D = f.G / f.H * 1000000 )]
说明:这里的dt.update功能和R的:=完全等价,会直接原地修改对象,不需要重新赋值。
内容的提问来源于stack exchange,提问作者Jiamei
相关产品推荐
相关产品推荐

