2017-06-08 5 views
1

DataFrameを12行から3列のDataFramesに分けて、すべてのDataFramesに一組のコードを同時に適用したいと思います。DataFrameを分割し、一度にすべての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 

結果のデータフレームは次のようになります。

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

最も単純にはtupleに変換して、すべてのDataFramesdictを作成され、その後にdictgroupbyオブジェクト:

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を使用している:

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 

するための関数を適用するには、使用の可能性あり関数 - 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 
+0

このソリューションは実装されています。辞書タプルでどのように関数を実行するのですか?この例では、sum_d = d ['A'] ['C']。sum()は列Cの合計をとりますが、すべての辞書キー(A、B、C、D) d ['A']内にある。一度にすべての辞書キーを繰り返す関数を実行することは可能ですか? –

+1

残念ながら、ありません。関数を反復して適用する必要があります。 :( – jezrael

+0

このタプルの辞書を繰り返し処理する方法はありますか?理想的には、DataFrameがDataFrameのようにタプルの辞書を繰り返し処理することができます(キーA、B、C、Dについて繰り返さないようにします)。 –

関連する問題