如何在DuckDB中实现类似Polars的horizontal sum功能?
在DuckDB中实现横向求和(Horizontal Sum)
当然可以,DuckDB提供了多种方式实现和Polars中sum_horizontal相同的横向求和功能,以下是几种常用方法:
方法1:直接列相加
如果明确知道要求和的列名,直接对列进行加法运算即可,逻辑直观:
import duckdb import pandas as pd # 创建测试数据 df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}) # 连接DuckDB并执行查询 con = duckdb.connect() result = con.execute("SELECT a + b AS sum_ab FROM df").df() print(result)
输出结果:
sum_ab 0 5 1 7 2 9
方法2:使用row_sum函数
DuckDB内置了row_sum函数,专门用于计算行内指定列的总和,和Polars的sum_horizontal用法高度契合:
import duckdb import pandas as pd df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}) con = duckdb.connect() # 直接传入列名 result = con.execute("SELECT row_sum(a, b) AS sum_ab FROM df").df() print(result)
输出和上面一致,如果你需要对多列批量求和,还可以结合列选择器:
-- 对所有列求和 SELECT row_sum(*) AS total FROM df; -- 对匹配前缀的列求和(比如所有以a开头的列) SELECT row_sum(columns('a*')) AS sum_a_cols FROM df;
方法3:注册DataFrame为视图后执行SQL
如果你习惯用纯SQL操作,也可以先把DataFrame注册为DuckDB的视图,再执行求和:
import duckdb import pandas as pd df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}) con = duckdb.connect() con.register('my_table', df) result = con.execute("SELECT a + b AS sum_ab FROM my_table").df() print(result)
以上几种方式都能实现和你提供的Polars代码完全相同的横向求和效果,根据你的列数量和命名规则选择最适合的方法即可。
内容的提问来源于stack exchange,提问作者ignoring_gravity
相关产品推荐
相关产品推荐

