如何按索引字符串分组将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
相关产品推荐
相关产品推荐

