I’ve got a data frame like this:
DF
JavaScript
x
17
17
1
ID A B C
2
00 X0 Y0 PARAMETER_0
3
01 X1 Y1 PARAMETER_1
4
02 X2 Y2 PARAMETER_2
5
03 X3 Y3 PARAMETER_3
6
04 X4 Y4 PARAMETER_4
7
05 X5 Y5 PARAMETER_0
8
06 X6 Y6 PARAMETER_1
9
07 X7 Y7 PARAMETER_2
10
08 X8 Y8 PARAMETER_3
11
09 X9 Y9 PARAMETER_4
12
10 XX0 YY0 PARAMETER_0
13
11 XX1 YY1 PARAMETER_1
14
12 XX2 YY2 PARAMETER_2
15
13 XX3 YY3 PARAMETER_3
16
14 XX4 YY4 PARAMETER_4
17
And I need to split it in multiple data frames by PARAMETER_4
in C
column, to get:
DF_1
JavaScript
1
7
1
ID A B C
2
00 X0 Y0 PARAMETER_0
3
01 X1 Y1 PARAMETER_1
4
02 X2 Y2 PARAMETER_2
5
03 X3 Y3 PARAMETER_3
6
04 X4 Y4 PARAMETER_4
7
DF_2
JavaScript
1
6
1
05 X5 Y5 PARAMETER_0
2
06 X6 Y6 PARAMETER_1
3
07 X7 Y7 PARAMETER_2
4
08 X8 Y8 PARAMETER_3
5
09 X9 Y9 PARAMETER_4
6
DF_3
JavaScript
1
6
1
10 XX0 YY0 PARAMETER_0
2
11 XX1 YY1 PARAMETER_1
3
12 XX2 YY2 PARAMETER_2
4
13 XX3 YY3 PARAMETER_3
5
14 XX4 YY4 PARAMETER_4
6
I cannot find any easy-way function like df.split(axis=0, value='PARAMETER_4')
Any idea about an approach? Thank you in advance!
Advertisement
Answer
We can use groupby
twice here. First we groupby on column C
and make a cumcount
. Then we groupby on this cumcount to get the seperate dataframes:
JavaScript
1
6
1
dfs = [d for _, d in df.groupby(df.groupby('C').cumcount())]
2
3
print(dfs[0], 'n')
4
print(dfs[1], 'n')
5
print(dfs[2])
6
Output
JavaScript
1
21
21
1
ID A B C
2
0 0 X0 Y0 PARAMETER_0
3
1 1 X1 Y1 PARAMETER_1
4
2 2 X2 Y2 PARAMETER_2
5
3 3 X3 Y3 PARAMETER_3
6
4 4 X4 Y4 PARAMETER_4
7
8
ID A B C
9
5 5 X5 Y5 PARAMETER_0
10
6 6 X6 Y6 PARAMETER_1
11
7 7 X7 Y7 PARAMETER_2
12
8 8 X8 Y8 PARAMETER_3
13
9 9 X9 Y9 PARAMETER_4
14
15
ID A B C
16
10 10 XX0 YY0 PARAMETER_0
17
11 11 XX1 YY1 PARAMETER_1
18
12 12 XX2 YY2 PARAMETER_2
19
13 13 XX3 YY3 PARAMETER_3
20
14 14 XX4 YY4 PARAMETER_4
21