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

如何按索引字符串分组将DataFrame拆分为指定子数组?

基于索引字符串分组拆分DataFrame为子数组

先构建示例DataFrame

import pandas as pd
import numpy as np

data = {
    '列1': ['sample']*10,
    '列2': [12,13,14,15,16,17,18,19,20,21]
}
index = ['Alpha','Alpha','Alpha','Bravo','Charlie','Charlie','Delta','Delta','Delta','Delta']
df = pd.DataFrame(data, index=index)

方法一:布尔索引直接筛选(最直观)

适合分组规则明确、分组数量少的场景:

# 定义两组的索引值
group1 = ['Alpha', 'Bravo']
group2 = ['Charlie', 'Delta']

# 获取子DataFrame,转数组加.values即可
chunk1 = df[df.index.isin(group1)]
chunk2 = df[df.index.isin(group2)]

# 转为numpy数组
chunk1_array = chunk1.values
chunk2_array = chunk2.values

方法二:自定义分组键的groupby(灵活扩展)

如果后续要增加更多分组,维护映射表即可:

# 建立索引值到组的映射
group_map = {
    'Alpha': 'g1',
    'Bravo': 'g1',
    'Charlie': 'g2',
    'Delta': 'g2'
}

# 按映射分组并提取子块
groups = df.groupby(group_map)
chunk1 = groups.get_group('g1')
chunk2 = groups.get_group('g2')

方法三:用np.array_split拆分(适配你的需求)

如果一定要用np.array_split,需要先定位拆分位置(适合索引连续分组的场景):

# 找到最后一个Bravo的结束位置(因为Alpha和Bravo连续排列)
split_idx = df.index.get_loc('Bravo').stop

# 拆分整个DataFrame的数组形式
chunks = np.array_split(df.values, [split_idx])
# chunks[0]对应Alpha+Bravo的数组,chunks[1]对应Charlie+Delta的数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:27:44