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

如何在PyArrow中实现按组的1索引累积计数(不转Pandas)

在PyArrow中实现按组的1索引累积计数

数据示例

data = {'a': [1,1,2], 'b': [4,5,6]}

需求

对列a分组后,生成每组内从1开始的累积计数,效果等价于Pandas中的groupby('a').cumcount() + 1。

Pandas实现参考

import pandas as pd

pd.DataFrame(data).groupby('a').cumcount() + 1

PyArrow实现方案

无需将初始PyArrow Table转换为Pandas或NumPy数组,可通过PyArrow的计算函数结合NumPy生成序列来实现:

import pyarrow as pa
import numpy as np

# 1. 创建PyArrow Table
table = pa.table(data)

# 2. 获取按'a'分组的分区起止索引
group_indices = pa.compute.partition_indices(table, keys=['a'])

# 3. 为每个分组生成从1开始的计数数组,再合并为一个完整数组
cumcount_array = pa.concat_arrays([
    pa.array(np.arange(1, end - start + 1)) 
    for start, end in group_indices
])

# 4. 将计数列添加到原Table中
result_table = table.append_column('cumcount', cumcount_array)

验证结果:result_table['cumcount']会得到[1, 2, 1],和Pandas的输出一致。

内容的提问来源于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.12 21:17:34