2017-06-21 3 views
2

したがって、私のコードは次のように構成されています。これは、タプルを充填したカラム作成:この例のようにタプルのpandas列をMultiIndexに変換する

import pandas as pd 

d = [] 
d.append({'wilderness':('bear','salmon'), 'domestic':('cat','mouse'), 'farm':('wolf','sheep')}) 
d.append({'wilderness':('polar bear','seal'), 'domestic':('spider','fly'), 'farm':('cow','grass')}) 

pd.DataFrame(d) 

enter image description here

を、各タプルの要素はここで、捕食者と獲物に関連しています。私は本当にこれらのタプルを無関係の別々の列に分割したくないので、ペア間の密接な関係を何とか構造内にとどめておきたい。

問題は、私の例の各文字列はここの動物名よりもかなり長く、Jupyterのノートブックでデータフレームを見ると、タプルの2番目の要素は全く見えません。それを見ることができ、それを選択することさえできます。

Jupyterでは、最初に、各タプル要素を2番目の行に移動させる設定があると考えられます。今、最高の解決策はおそらくpd.MultiIndex.from_tuples()であると思うが、それをどのように使いこなすのに問題が多いのか。いくつかの例を参照してくださいherehere

誰でもこれを行う方法を知っていますか?列見出しには2つのレベルがあります(例:domestic-predator /獲物)。タプル要素はそれぞれ新しいサブカラムに入ります。

私はPandasとNumPyでループを使用しないようにしていますが、これは難しくパフォーマンスは問題ではないため、解決策がこのループの友好的なデータフレーム。

編集 - ここで所望の出力が

 domestic    farm     wilderness 
     predator prey  predator prey  predator prey 

0  cat  mouse  wolf  sheep  bear  salmon 
1  spider fly   cow  grass  polar bear seal 

答えて

2

であるあなたがlist comprehensionconcat使用することができます。

df = pd.concat([pd.DataFrame(x, columns=['predator','prey']) for x in df.values.T.tolist()], 
       axis=1, 
       keys=df.columns) 
print (df) 

    domestic   farm   wilderness   
    predator prey predator prey predator prey 
0  cat mouse  wolf sheep  bear salmon 
1 spider fly  cow grass polar bear seal 
+0

おかげで、それが動作します!どのように正確に勉強しています。 'df.values.T.tolist()'を見てきました。これは 'pd.DataFrame'コマンドで使用されたリストの理解度を初めて見たことがあります。私は 'keys'はあなたが使ったと思っていると思いますが、結局MultiIndexが必要なようには見えません。 – cardamom

関連する問題