我刚开始使用Polars(Python),所以这可能是一个无知的问题.我有一个DF,如图所示,其中一列(系列)包含长度为18的numpyarray.我想在group
列上做一个groupby,在series列上做一个成对求和聚合,但是我想不出在Polars中做这件事的好方法.当然,我可以只做一个map_elements和np.sum数组(就像在例子中),但我希望有一种方法可以优化它.
下面是我目前的实现,它达到了预期的效果,但我不认为它是最佳的,因为它使用了map_elements.有没有一个polars表达式可以实现同样的事情,或者这是我能做的最好的事情(没有学习Rust,我总有一天会学习的)?
import polars as pl
import numpy as np
data = [
{'group': 1,
'series': np.array([ 2398, 2590, 3000, 3731, 3986, 4603, 4146, 4325, 6068,
6028, 7486, 7759, 8323, 8961, 9598, 10236, 10873, 11511])},
{'group': 1,
'series': np.array([ 2398, 2590, 3000, 3731, 3986, 4603, 4146, 4325, 6068,
6028, 7486, 7759, 8323, 8961, 9598, 10236, 10873, 11511])},
{'group': 2,
'series': np.array([1132, 1269, 1452, 1687, 1389, 1655, 1532, 1661, 1711, 1528, 1582,
1638, 1603, 1600, 1597, 1594, 1591, 1588])},
{'group': 3,
'series': np.array([ 2802, 3065, 3811, 4823, 4571, 4817, 4668, 5110, 6920,
7131, 10154, 11138, 11699, 12840, 13981, 15123, 16264, 17405])},
]
df = pl.DataFrame(data)
# this performs the desired aggregation (pairwise sum of 'series' arrays)
# sums first two rows together (group 1), leaves others unchanged
df.groupby('group').agg([
pl.col('series').map_elements(lambda x: np.sum(x.to_list(), axis=0))
]).to_dicts()
'''
desired output
group series
i64 object
2 [1132 1269 1452 1687 1389 1655 1532 1661 1711 1528 1582 1638 1603 1600
1597 1594 1591 1588]
1 [ 4796 5180 6000 7462 7972 9206 8292 8650 12136 12056 14972 15518
16646 17922 19196 20472 21746 23022]
3 [ 2802 3065 3811 4823 4571 4817 4668 5110 6920 7131 10154 11138
11699 12840 13981 15123 16264 17405]
'''
事先感谢您的帮助.