我想按列值将我的DataFrame从十二行分成三个DataFrame,然后同时将一组代码应用于所有DataFrame。
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
生成的DataFrame应该是:
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'])
,但这些函数似乎不允许我应用一组代码而没有错误。
答案 0 :(得分:2)
通过转换为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
- 请参阅docs:
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