2016-12-10 14 views
3

私はデータ分析のためにJMPを自由にしようとしていますが、JMPのSplit Columns機能に相当するパンダは判別できません。私はpivot_table機能を使用してJMPの機能の出力シナリオの一部を処理することができますpandas複数の列値によるデータフレームの再構成

In [1]: df = pd.DataFrame({'Level0': [0,0,0,0,0,0,1,1,1,1,1,1], 'Level1': [0,1,0,1,0,1,0,1,0,1,0,1], 'Vals': [1,3,2,4,1,6,7,5,3,3,2,8]}) 
In [2]: df 
Out[2]: 
    Level0 Level1 Vals 
0  0  0  1 
1  0  1  3 
2  0  0  2 
3  0  1  4 
4  0  0  1 
5  0  1  6 
6  1  0  7 
7  1  1  5 
8  1  0  3 
9  1  1  3 
10  1  0  2 
11  1  1  8 

、私はVals列が独特の組み合わせによって分割された場合に困惑:私は、次のデータフレームを始めています次の出力与えるLevel0Level1

Level0 0  1 
Level1 0 1 0 1 
0  1 3 7 5 
1  2 4 3 3 
2  1 6 2 8 

を私はpd.pivot_table(df, values='Vals', columns=['Level0', 'Level1'])を試してみましたが、これは、異なる組み合わせの平均値示します:

Level0 Level1 
0  0   1.333333 
     1   4.333333 
1  0   4.000000 
     1   5.333333 
0123を

私も、私がしたい列のヘッダーを取得しますが、それは出力がNaN値をたくさん持っているので、オリジナルと同じ行数を持つように出力を強制するので動作しませんpd.pivot_table(df, values='Vals', index=df.index, columns=['Level0', 'Level1']を試してみました:

Level0 0  1 
Level1 0 1 0 1 
0  1 NaN NaN NaN 
1  NaN 3 NaN NaN 
2  2 NaN NaN NaN 
3  NaN 4 NaN NaN 
4  1 NaN NaN NaN 
5  NaN 6 NaN NaN 
6  NaN NaN 7 NaN 
7  NaN NaN NaN 5 
8  NaN NaN 3 NaN 
9  NaN NaN NaN 3 
10  NaN NaN 2 NaN 
11  NaN NaN NaN 8 

提案がありますか?

答えて

3

これは、回避策の少しですが、あなたは行うことができます。

df.pivot_table(index=df.groupby(['Level0', 'Level1']).cumcount(), 
       columns=['Level0', 'Level1'], values='Vals', aggfunc='first') 
Out: 
Level0 0  1 
Level1 0 1 0 1 
0  1 3 7 5 
1  2 4 3 3 
2  1 6 2 8 

ここでの考え方は、出力の指数が容易に入手でき、元のデータフレームではないということです。次でそれを得ることができます:今

df.groupby(['Level0', 'Level1']).cumcount() 
Out: 
0  0 
1  0 
2  1 
3  1 
4  2 
5  2 
6  0 
7  0 
8  1 
9  1 
10 2 
11 2 
dtype: int64 

をあなたはpivot_tableの指標として、これに合格した場合、任意のaggfunc(平均値、minは、最初または最後の最大は、)これらのインデックス・カラムとしてあなたのために働く必要がありますペアには1つのエントリしかありません。

+0

ありがとうayhan。よく働く。 'aggfunc = 'first''は実際にここに必要ですか?私はそれなしで同じ答えを得る。 – endangeredoxen

+0

@endangeredoxenデフォルトはaggfuncの場合は「平均」です。単一の値があるので、実際には関係ありません。平均、最小、最大、最初または最後のいずれかが行います。 – ayhan

関連する問題