2017-12-30 14 views
1

私はA、B、Cの3つの列を持つデータフレームを持っています。AとBは0から10までの整数シリーズです。 Aのユニークな値がインデックスである新しいデータフレーム、Bのユニークな値はカラムであり、各セルはAi、Cjの交点で得られた平均値Cである。例えばのでパンダ:他の2つの列に関連するデータフレームを作成する

私たちは、このようにデータフレームをグループ化した場合:

Cvalues.loc[Cvalues.A==i].loc[Cvalues.B==j].C 

:私はあるだろう作成したいデータフレームの(i、j)の位置にある

Cvalues = df.groupby(['A','B'],as_index=False).mean() 

それを行う最も簡単な方法は何ですか?

+1

あなたの説明は役に立ちません。再現可能なデータサンプルをテキストと期待される出力として[mcve]を提供してください。それは非常に助けになります。特に、正しい答えが働くことを望むならば。 –

+0

'Cvalues.unstack()'や 'pivot_table'や' crosstab'のように見えます –

答えて

1

あなたはほぼそこにいます。 pivotCvaluesのいずれか、またはより良い方法ですが、直接pivot_tableに行き、aggfuncの組み込みオプションを使用します。

df = pd.DataFrame({'A':[2,0,1,1,2,0,1,0], 
        'B':[1,2,1,0,1,2,1,1], 
        'C':[10,20,30,40,50,60,70,80]}) 

推奨ワンライナー:

Cvalues = df.groupby(['A','B'],as_index=False).mean() 
res = Cvalues.pivot(index='A', columns='B', values='C') 

はなぜわざわざ、しかし、念のために、あなたは、これはもう少しコンパクトに作ることができます:

res = df.pivot_table(index='A', columns='B', values='C', aggfunc='mean') 

は、あなたのメソッドの仕事を作ります
res = df.groupby(['A','B'],as_index=False).mean().pivot(index='A', columns='B', values='C') 

ここに結果があります両方の方法の:

B  0  1  2 
A     
0 NaN 80.0 40.0 
1 40.0 50.0 NaN 
2 NaN 30.0 NaN 

ところ、A=2 and B=1の交差点で:30.0 = (10 + 50)/2

関連する問題