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

Polars是否支持对每组分对数据应用自定义函数的操作?

Polars是否支持对每组分对数据应用自定义函数的操作?

当然支持啦!其实你可以通过几个简单的步骤轻松实现这个需求,我结合你的示例数据给你拆解一下具体怎么做:

首先,得先拿到所有需要处理的组对组合。你可以用Python标准库的itertools.combinations快速生成所有两两不重复的组对,不用自己手动写嵌套循环折腾:

from itertools import combinations
import polars as pl
import numpy as np

# 先还原你的示例DataFrame
num_points = 10
group_count = 3
df = pl.DataFrame(
    {
        "group_id": np.concatenate([[i]*num_points for i in range(group_count)]),
        "data": np.concatenate([np.random.rand(num_points) for _ in range(group_count)]),
    }
)

# 获取所有唯一的组ID
unique_groups = df["group_id"].unique().to_list()
# 生成所有两两不重复的组对(比如(0,1)、(0,2)、(1,2))
group_pairs = list(combinations(unique_groups, 2))

接下来,定义你自己的自定义操作函数就行。比如假设你想计算两组数据的皮尔逊相关系数,就可以这么写:

def custom_group_op(group_a_data, group_b_data):
    # 这里直接替换成你实际需要的业务逻辑就行
    return np.corrcoef(group_a_data, group_b_data)[0, 1]

然后就可以遍历每个组对,取出对应组的数据,应用函数,最后把结果整理成Polars DataFrame方便后续处理:

results = []
for g1, g2 in group_pairs:
    # 提取两组的data列数据(转成numpy数组还是保留Polars Series,看你函数的需求来)
    data_g1 = df.filter(pl.col("group_id") == g1)["data"].to_numpy()
    data_g2 = df.filter(pl.col("group_id") == g2)["data"].to_numpy()
    # 执行自定义操作
    op_result = custom_group_op(data_g1, data_g2)
    # 把结果存入列表
    results.append({
        "group_pair": f"组{g1}-组{g2}",
        "操作结果": op_result
    })

# 转成Polars DataFrame方便查看和后续处理
result_df = pl.DataFrame(results)
print(result_df)

如果你的自定义函数能兼容Polars的向量化操作,还能进一步优化运行效率,但要是必须用特定自定义逻辑的场景,上面的方法已经足够直观好用了——毕竟组对的数量一般不会特别大,这种方式调试起来也很方便。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:18:06