2017-12-02 26 views
0

にグループ化することにより、複数の列にグループ化され積み重ねられた列の変換:私はGROUPBY機能を使用して、このようなものを見て、私のデータフレームを組織してきたパンダ

Compound Sample Concentration x y 
Benzene A   15    Ax Ay 
      B   20    Bx By 
      C   17    Cx Cy 

Toluene A   23    Ax Ay 
      B   40    Bx By 

Xylene  A   70    Ax Ay 
      B   62    Bx By 
      C   55    Cx Cy 
      D   32    Dx Dy 

私は同じ高さの複数の列に列スタックを解除するにはどうすればよいですカラム名としてグループ化されていますか?再配置するよう

Compound  Sample  Concentration   x y 
1 Benzene  A    15      Ax Ay 
5 Benzene  B    20      Bx By 
6 Benzene  C    17      Cx Cy 
0 Toluene  A    23      Ax Ay 
4 Toluene  B    40      Bx By 
2 Xylene  A    70      Ax Ay 
3 Xylene  B    62      Bx By 
7 Xylene  C    55      Cx Cy 
8 Xylene  D    32      Dx Dy 

Iは、化合物の並び順:私はGROUPBY機能を使用した後、私は、私のデータは次のように見えるように使用されるインデックスを失っ編集

Sample Benzene Toluene Xylene x y 
A   15  23   70  Ax Ay 
B   20  40   62  Bx By 
C   17  0   55  Cx Cy 
D   0   0   32  Dx Dy  

:私はこのような何かを達成したいです最初にサンプルでソートされたすべてのインデックス

+0

https://pandas.pydata.org/pandas- docs/stable/generated/pandas.DataFrame.unstack.html – Abhishek

答えて

0

あなたの投稿に基づいて、どの列がインデックスにあるのかは本当に明らかではありません。それらのどれもが(あなたが(df.reset_indexを強制することができた))でない場合は、次の操作を行うことができます

df.set_index(['Compound', 'Sample', 'x', 'y'], inplace = True) 
df = df['Concentration'] 
df = df.unstack(level = 0) 
df.reset_index(inplace = True) 

これが一致していない、あなたの出力は、xとyの列ということであることを唯一の方法今すぐあなたのデータの左側にあります。これらの列はサンプルレターから簡単に作成されるように見えるので、この変換後に追加する方が簡単かもしれません。唯一の列としてあなたのインデックス中の化合物とサンプルとのデータフレーム、および濃度を与えたことにより、あなたのグループならばそれは、あなただけ行うことができますされています

df = df['Concentration'].unstack(level = 0) 

、その後はあなたのxとyの列を追加します。

編集:あなたの元データから、あなたもこれを行うことができ、あなたはGROUPBYでやったことないし、ワンステップでで整形:

df2 = pd.pivot_table(df, index = ['Sample', 'x', 'y'], columns = 'Compound', values = 'Concentration') 
+0

groupby関数は、特にas_index = Falseオプションを指定しない限り、インデックスでグループ化する列を作成します。複合名がすべての行に表示されないという事実は、それがインデックスの一部であると私に思います。 –

+0

すべての列でグループ化したので、すべての値をインデックスに入れた可能性がありますか?私はそれがどのように機能するか正確にはわかりません。 groupby関数を使用する前に、どのように見えるかを示すために質問を編集しました。 –

関連する問題