2016-11-19 10 views
3

パンダのデータフレームにgroupbyを使用したいが、いくつかの列の平均と他のものの合計を取得したい。我々は、次のデータフレームを持っているとしましょう:パンダデータフレームの異なる列に異なる機能を適用する方法

ID A B C 
1 1 1 0 
1 2 3 1 
1 3 6 1 
4 3 2 1 
4 4 1 0 
6 5 1 0 
6 6 6 1 
6 7 2 0 

私はIDをGROUPBY、列「A」の平均値と他の列(実際には、私は40の以上の列を持っている)の合計を取得したいと思います。

私はこのように見える結果が欲しい:事前に

ID A B C 
1 2 10 2 
4 3.5 3 1 
6 6 9 1 

感謝を。

答えて

7

あなたはこのようにそれを行うことができます。

データ:

In [127]: df = pd.DataFrame(np.random.randint(0,10, (7,6)), columns=list('ABCDEF')) 
    ...: df['ID'] = np.random.choice([1,2], len(df)) 
    ...: 

In [128]: df 
Out[128]: 
    A B C D E F ID 
0 7 7 2 2 3 0 1 
1 8 4 1 3 6 8 1 
2 4 7 7 2 8 4 2 
3 5 9 3 6 6 1 1 
4 4 6 1 7 4 6 2 
5 4 5 3 8 7 6 2 
6 8 4 1 8 1 0 1 

ソリューション:

In [129]: fnc = {c:'sum' for c in df.columns.drop(['ID','A'])} 
    ...: fnc['A'] = 'mean' 
    ...: 

In [130]: fnc 
Out[130]: {'A': 'mean', 'B': 'sum', 'C': 'sum', 'D': 'sum', 'E': 'sum', 'F': 'sum'} 

In [131]: df.groupby('ID').agg(fnc).reindex_axis(df.columns.drop('ID'), 1) 
Out[131]: 
    A B C D E F 
ID 
1 7 24 7 19 16 9 
2 4 18 11 17 19 16 
+2

は '.tolist()'本当に必要を使用していますか? 'Index'オブジェクトを繰り返し処理できますか? –

+1

@ juanpa.arrivillaga、はい、本当にありがとうございます! – MaxU

+1

さらに、これらの関数を 'OrderedDict'に渡すことで、列の順序が結果の' DF'に残るようにすることができます。 –

関連する問題