2017-03-13 10 views
2

これはStackOverflowの最初の質問です。私はあなたが問題を助けることができることを願っています。それはしばらく私を悩ませています。私は合っている答えを見つけることができませんでした。カテゴリの列のカテゴリ値の行を作成します。

は私のデータは次のようになります。

(インデックス列なし)ouputs
df = pd.DataFrame({'col1': {0: 1, 1: 1, 2: 1}, 
       'col2': {0: 1, 1: 2, 2: 3}, 
       'col3': {0: 1, 1: 2, 2: 3}, 
       'col4': {0: 1.1, 1: 2.1, 2: 3.1}, 
       'col5': {0: 10, 1: 12, 2: 14}, 
       'col6': {0: 1.2, 1: 2.2, 2: 3.2}, 
       'col7': {0: 11, 1: 13, 2: 15}, 
       }) 
df.columns = ["VZ", "NZ", "L", "T_0_Rel", "T_0_Abs", "T_Akt_Rel", "T_Akt_Abs"] 
df 

╔════╦════╦═══╦═════════════╦═════╦═════╗ 
║ VZ ║ NZ ║ L ║ T_0/T_Akt ║ Abs ║ Rel ║ 
╠════╬════╬═══╬═════════════╬═════╬═════╣ 
║ 1 ║ 1 ║ 1 ║  T_0  ║ 10 ║ 1.1 ║ 
║ 1 ║ 1 ║ 1 ║  T_Akt ║ 11 ║ 1.2 ║ 
║ 1 ║ 2 ║ 2 ║  T_0  ║ 12 ║ 2.1 ║ 
║ 1 ║ 2 ║ 2 ║  T_Akt ║ 13 ║ 2.2 ║ 
║ 1 ║ 3 ║ 3 ║  T_0  ║ 14 ║ 3.1 ║ 
║ 1 ║ 3 ║ 3 ║  T_Akt ║ 15 ║ 3.2 ║ 
╚════╩════╩═══╩═════════════╩═════╩═════╝ 

╔════╦════╦═══╦═════════╦═════════╦═══════════╦═══════════╗ 
║ VZ ║ NZ ║ L ║ T_0_Rel ║ T_0_Abs ║ T_Akt_Rel ║ T_Akt_Abs ║ 
╠════╬════╬═══╬═════════╬═════════╬═══════════╬═══════════╣ 
║ 1 ║ 1 ║ 1 ║ 1.1 ║ 10 ║ 1.2 ║  11 ║ 
║ 1 ║ 1 ║ 2 ║ 2.1 ║ 12 ║ 2.2 ║  13 ║ 
║ 1 ║ 1 ║ 3 ║ 3.1 ║ 14 ║ 3.2 ║  15 ║ 
╚════╩════╩═══╩═════════╩═════════╩═══════════╩═══════════╝ 

は今、私はこのようなものの中に、このデータフレームをねじるようにしたいです

基本的には、T_OとT_Aktの値ごとに行が必要ですが、Abs値とRel値は1行にとどまります。

私は、これは.STACK()または.melt()で可能であるべきはずが、私はそれを行う方法を見つけ出すことができます。

このすべての背後にある私の意図は、seaborn.boxplotまたは.violinplot機能に色相 -argumentを使用するために私のDATAFRAMEでカテゴリ値を持つことです。分類値の代わりに色相引数をいくつかの列で使用する方法を理解できませんでした。 (私はここで間違っているかもしれませんが、もっと簡単な方法があります...)

ありがとうございます。

答えて

4

あなたは概念的に階層列インデックスを持っているので、私はそれをそのように行い、その後stack

df = pandas.DataFrame({ 
    'VZ': {0: 1, 1: 1, 2: 1}, 
    'NZ': {0: 1, 1: 2, 2: 3}, 
    'L': {0: 1, 1: 2, 2: 3}, 
    'T_0_Rel': {0: 1.1, 1: 2.1, 2: 3.1}, 
    'T_0_Abs': {0: 10, 1: 12, 2: 14}, 
    'T_Akt_Rel': {0: 1.2, 1: 2.2, 2: 3.2}, 
    'T_Akt_Abs': {0: 11, 1: 13, 2: 15}, 
}) 

print(
    df.set_index(['VZ', 'NZ', 'L']) # row labels 
     .rename(columns=lambda c: tuple(c.rsplit('_', 1))) # create the multi-cols 
     .stack(level=0) # unpivot 
     .reset_index() # move the row labels back into normal columns 
) 

を使用して、私は見るでしょう:

VZ NZ L level_3 Abs Rel 
0 1 1 1  T_0 10 1.1 
1 1 1 1 T_Akt 11 1.2 
2 1 2 2  T_0 12 2.1 
3 1 2 2 T_Akt 13 2.2 
4 1 3 3  T_0 14 3.1 
5 1 3 3 T_Akt 15 3.2 
関連する問題