将自定义函数应用于Polars中的多个列的最佳方法是什么?具体地说,我需要函数引用另一个列的框架.假设我有以下内容:

df = pl.DataFrame({
    'group': [1,1,2,2],
    'other': ['a', 'b', 'a', 'b'],
    'num_obs': [10, 5, 20, 10],
    'x': [1,2,3,4],
    'y': [5,6,7,8],
})

我想按group分组,计算xy的平均值,再乘以num_obs.我可以做这样的事

variables = ['x', 'y']
df.group_by('group').agg((pl.col(var) * pl.col('num_obs')).sum()/pl.col('num_obs').sum() for var in variables)

但我想知道有没有更好的办法此外,我不知道如何向这种方法添加其他聚合,但有没有一种方法可以添加pl.sum('n_obs')个聚合?谢谢!

推荐答案

您可以将列列表传递到pl.col():

df.group_by('group').agg(
    (pl.col('x','y') * pl.col('num_obs')).sum() / pl.col('num_obs').sum(),
    pl.col('num_obs').sum()
)

┌───────┬──────────┬──────────┬─────────┐
│ group ┆ x        ┆ y        ┆ num_obs │
│ ---   ┆ ---      ┆ ---      ┆ ---     │
│ i64   ┆ f64      ┆ f64      ┆ i64     │
╞═══════╪══════════╪══════════╪═════════╡
│ 1     ┆ 1.333333 ┆ 5.333333 ┆ 15      │
│ 2     ┆ 3.333333 ┆ 7.333333 ┆ 30      │
└───────┴──────────┴──────────┴─────────┘

Python相关问答推荐

如何找到满足各组口罩条件的第一行?

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

如何在虚拟Python环境中运行Python程序?

使用groupby Pandas的一些操作

在Python中动态计算范围

使用NeuralProphet绘制置信区间时出错

在Django admin中自动完成相关字段筛选

Python列表不会在条件while循环中正确随机化'

通过ManyToMany字段与Through在Django Admin中过滤

巨 Python :逆向猜谜游戏

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

freq = inject在pandas中做了什么?''它与freq = D有什么不同?''

数据框,如果值在范围内,则获取范围和

为罕见情况下的回退None值键入

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

多索引数据帧到标准索引DF

Django更新视图未更新

查找数据帧的给定列中是否存在特定值

在聚合中使用python-polars时如何计算模式

按列表分组到新列中