/ / Розділити DataFrame і застосувати код до всіх DataFrames відразу? - python, pandas, dataframe, split, group-by

Розділити DataFrame і застосувати код до всіх DataFrames відразу? - python, pandas, dataframe, split, group-by

Я хотів би відокремити свій DataFrame від дванадцяти рядків до трьох DataFrames за значенням стовпців, а потім застосувати набір кодів до всіх DataFrames одночасно.

    A     B      C
1  A   0.25     0
2  A   0.50     0
3  A   0.75     0
4  B   1.00     1
5  B   1.25     1
6  B   1.75     1
7  C   0.50     1
8  C  -0.25     0
9  C   1.25     1
10  D   0.75     1
11  D  -0.75     0
12  D  -1.00    -1

Результуючі DataFrames повинні бути:

    A     B      C
1  A   0.25     0
2  A   0.50     0
3  A   0.75     0

4  B   1.00     1
5  B   1.25     1
6  B   1.75     1

7  C   0.50     1
8  C  -0.25     0
9  C   1.25     1

10  D   0.75     1
11  D  -0.75     0
12  D  -1.00    -1

Поки що я намагався df.groupby(["A"]) і df.set_index(["A"]) але ці функції, здається, не дозволяють мені застосовувати набір кодів без помилок.

Відповіді:

2 для відповіді № 1

Створено найпростіше dict з всіх DataFrames перетворити на tuple а потім до dict groupby об'єкт:

d = dict(tuple(df.groupby("A")))
print (d)
{"B":    A     B  C
4  B  1.00  1
5  B  1.25  1
6  B  1.75  1, "A":    A     B  C
1  A  0.25  0
2  A  0.50  0
3  A  0.75  0, "D":     A     B  C
10  D  0.75  1
11  D -0.75  0
12  D -1.00 -1, "C":    A     B  C
7  C  0.50  1
8  C -0.25  0
9  C  1.25  1}

print (d["A"])
A     B  C
1  A  0.25  0
2  A  0.50  0
3  A  0.75  0

Для застосування функцій можливе використання:

for i, x in d.items():
d[i] = x.mean(axis=1)

print (d["A"])
1    0.125
2    0.250
3    0.375
dtype: float64

Але краще це використовувати groupby з користувальницькою функцією - див документи:

def f(x):
print (x)
return x.mean(axis=1)

df1 = df.groupby("A").apply(f)
print (df1)
A  1     0.125
2     0.250
3     0.375
B  4     1.000
5     1.125
6     1.375
C  7     0.750
8    -0.125
9     1.125
D  10    0.875
11   -0.375
12   -1.000
dtype: float64