拆分DataFrame并立即将代码应用于所有DataFrame?

时间:2017-06-08 13:33:05

标签: python pandas dataframe split group-by

我想按列值将我的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']),但这些函数似乎不允许我应用一组代码而没有错误。

1 个答案:

答案 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