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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:12:04