2017-11-14 1 views
0

私は、列名が共通要素を共有するデータフレームを持っています。この共通要素の接尾辞を持つ他の列が生成されています。私は約100のエントリのこれらの要素のリストを持っています。私はこのリストを使用して大きなdfを繰り返しスライスし、サブdfをグループ化して最終的にそれらを連結して変換したいと思います。共通要素に基づくDFのスライシングによるDFの辞書の生成

私はリストをキーとして使用し、この要素を共有する列を値として定義する辞書アプローチを使用することを考えていました。私はこれを実装する方法がわかりません。私はスケールアップしたいものを説明するために簡略版をコピーしました。現実には、それぞれ100個のキーがあり、それぞれ20個の関連する列があります。

A A_1 A_2 A_3 B B_1 B_2 B_3 
0 1 e f g 1 x y z 
1 2 e f g 2 x y z 
2 3 e f g 3 x y z 
3 3 e f g 3 x y z 
4 3 e f g 4 x y z 
5 3 e f g 4 x y z 

df_list = ['A','B'] 

df_A = df[df.columns[df.columns.to_series().str.contains('A')]] 

df_B = df[df.columns[df.columns.to_series().str.contains('B')]] 

calc_A = df_A.groupby(['A']).head(1) 
print(calc_A) 

    A A_1 A_2 A_3 
0 1 e f g 
1 2 e f g 
2 3 e f g 


calc_B = df_B.groupby(['B']).head(1) 
print(calc_B) 

    B B_1 B_2 B_3 
0 1 x y z 
1 2 x y z 
2 3 x y z 
4 4 x y z 

DFをスライスして、新しいサブDFの値として鍵を共有列を割り当てるために、リストを反復処理、この辞書を構築する方法を教えてください。ありがとうございました。

答えて

0

IIUCは、次のことができ、その後、列プレフィックスのグループ、および辞書を初期化:

d = {} 
for i, g in df.groupby(by=lambda x: x.split('_')[0], axis=1): 
    d[i] = g.groupby(i).head(1) 

あなたはまた、dictの理解を使用してこれを行うことができます:

d = { 
     i : g.groupby(i).head(1) 
     for (i, g) in df.groupby(by=lambda x: x.split('_')[0], axis=1) 
} 

for k, v in d.items(): 
    print(v, '\n') 

    A A_1 A_2 A_3 
0 1 e f g 
1 2 e f g 
2 3 e f g 

    B B_1 B_2 B_3 
0 1 x y z 
1 2 x y z 
2 3 x y z 
4 4 x y z 

d.keys() 
dict_keys(['A', 'B']) 
関連する問題