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

如何按指定列的多个唯一值拆分DataFrame或数组

Pandas按account_id列拆分DataFrame实现方案
  • 优先使用pandas内置groupby方法实现,这是性能最优、代码最简洁的方案,完全适配数千行规模的数据集,无需手写逐行循环:
import pandas as pd

# 原始DataFrame变量名为df
account_subdfs = {}
# groupby的sort=False参数可以关闭分组排序,保持原数据中id的出现顺序,进一步提升速度
for acc_id, sub_df in df.groupby('account_id', sort=False):
    # 存储为子DataFrame,重置索引避免后续处理出现索引混乱
    account_subdfs[acc_id] = sub_df.reset_index(drop=True)
    # 如果需要数组格式,直接替换成下面这行即可
    # account_subdfs[acc_id] = sub_df.to_numpy()

调用的时候直接用account_subdfs['ab123982173']就能拿到对应账号的子数据,后续做格式转换、批量处理都很方便。

  • 如果后续只需要数组格式做计算,且同一个account_id的行在原表中是连续排列的,可以用numpy的拆分方法进一步提升速度:
import numpy as np

# 提取account_id列的编码,定位不同id的切分位置
id_encoding, unique_acc_ids = df['account_id'].factorize()
split_pos = np.where(np.diff(id_encoding) != 0)[0] + 1
# 直接切分整体数组
split_arr_list = np.split(df.to_numpy(), split_pos)
# 打包成账号id对应子数组的字典
account_subarrays = dict(zip(unique_acc_ids, split_arr_list))

注意:如果原表中同一个account_id的行是分散不连续的,使用numpy拆分前需要先执行df = df.sort_values('account_id').reset_index(drop=True)排序,否则会把同一id的数据拆成多段。

  • 性能提示:以上两种方法都是基于库底层优化过的C实现逻辑,比纯Python手写逐行判断、拼接临时数组的方案快数十倍,哪怕数据量涨到十万行级别也能快速处理完成。

内容的提问来源于stack exchange,提问作者gmelgkermglermgmrelkgm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:03:22