英文:
Array_Split with grouped string indices
问题
我有一个数据框,我想在其中创建子数组(即分块),基于索引中的字符串值组。我已经阅读了如何将字符串值列表作为np.array_split中的indices变量传递,但我的情况有点更复杂,我不确定最佳方法。
从下表/数组中,我想要有2个子数组:一个包括索引字符串值"Alpha"和"Bravo",第二个包括值"Charlie"和"Delta"。
示例表格:
索引 | 列1 | 列2 |
---|---|---|
Alpha | 样本 | 12 |
Alpha | 样本 | 13 |
Alpha | 样本 | 14 |
Bravo | 样本 | 15 |
Charlie | 样本 | 16 |
Charlie | 样本 | 17 |
Delta | 样本 | 18 |
Delta | 样本 | 19 |
Delta | 样本 | 20 |
Delta | 样本 | 21 |
英文:
I have a dataframe that I would like to create sub-arrays within (i.e. chunk) based on groups of string values within the index. I've read how you can pass a list of string values as the indices variable in np.array_split, but my scenario is a bit more complicated and I'm unsure on best approach.
From the below table/array, I'd like to have 2 sub-arrays: one array which includes index string values "Alpha" and "Bravo", the second with values "Charlie" and "Delta"
Example table:
Index | Column1 | Column2 |
---|---|---|
Alpha | sample | 12 |
Alpha | sample | 13 |
Alpha | sample | 14 |
Bravo | sample | 15 |
Charlie | sample | 16 |
Charlie | sample | 17 |
Delta | sample | 18 |
Delta | sample | 19 |
Delta | sample | 20 |
Delta | sample | 21 |
答案1
得分: 1
假设有一个DataFrame,并且您想要按自定义分组拆分:
groups = ['Alpha', 'Bravo'], ['Charlie', 'Delta']
dfs = [g for _, g in df.groupby(df['Index'].map({k: v for v, l in enumerate(groups) for k in l}))]
输出:
dfs[0]
Index Column1 Column2
0 Alpha sample 12
1 Alpha sample 13
2 Alpha sample 14
3 Bravo sample 15
dfs[1]
Index Column1 Column2
4 Charlie sample 16
5 Charlie sample 17
6 Delta sample 18
7 Delta sample 19
8 Delta sample 20
9 Delta sample 21
或者,如果 "Index" 实际上是索引:
groups = ['Alpha', 'Bravo'], ['Charlie', 'Delta']
dfs = [df.loc[l] for l in groups]
输出:
dfs[0]
Column1 Column2
Alpha sample 12
Alpha sample 13
Alpha sample 14
Bravo sample 15
dfs[1]
Column1 Column2
Charlie sample 16
Charlie sample 17
Delta sample 18
Delta sample 19
Delta sample 20
Delta sample 21
最后,如果您没有明确的组合想法,只想要2个值的组(按顺序),那么可以使用:
dfs = [g for _, g in df.groupby(pd.factorize(df['Index'])[0] // 2)]
英文:
Assuming a DataFrame and that you want to split by custom groups:
groups = [['Alpha', 'Bravo'], ['Charlie', 'Delta']]
dfs = [g for _, g in df.groupby(df['Index'].map({k: v for v,l in enumerate(groups) for k in l}))]
Output:
dfs[0]
Index Column1 Column2
0 Alpha sample 12
1 Alpha sample 13
2 Alpha sample 14
3 Bravo sample 15
dfs[1]
Index Column1 Column2
4 Charlie sample 16
5 Charlie sample 17
6 Delta sample 18
7 Delta sample 19
8 Delta sample 20
9 Delta sample 21
Or, if "Index" is actually the index:
groups = [['Alpha', 'Bravo'], ['Charlie', 'Delta']]
dfs = [df.loc[l] for l in groups]
Output:
dfs[0]
Column1 Column2
Alpha sample 12
Alpha sample 13
Alpha sample 14
Bravo sample 15
dfs[1]
Column1 Column2
Charlie sample 16
Charlie sample 17
Delta sample 18
Delta sample 19
Delta sample 20
Delta sample 21
Finally, if you don't have explicit combinations in mind but just want groups of 2 values (in order), then use:
dfs = [g for _,g in df.groupby(pd.factorize(df['Index'])[0]//2)]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论