Я хотів би відокремити свій 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