将元组的pandas列转换为MultiIndex

时间:2017-06-21 12:07:28

标签: python pandas dataframe jupyter-notebook multi-index

所以我的代码组织类似于以下内容。它创建了填充元组的列:

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笔记本中查看数据帧时,我根本看不到元组的第二个元素,我需要成为能够看到它,甚至选择它等。

所以最初认为Jupyter中可能会有一些设置会使每个元组元素进入第二行。现在认为最好的解决方案可能是pd.MultiIndex.from_tuples()但是在解决如何使用它时遇到了很多麻烦。看一些示例herehere

有谁知道怎么做?应该有两个级别的列标题,例如国内捕食者/猎物,元组元素进入每个新的子列。

我尽量不在Pandas和NumPy中使用for循环,但这是一个难以实现并且性能不是问题的场合,所以如果解决方案保留了这个for循环友好的创建方法,那就更喜欢数据框。

编辑 - 这是所需的输出

       domestic              farm                  wilderness
       predator  prey        predator  prey        predator    prey

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

1 个答案:

答案 0 :(得分:2)

您可以concat使用list comprehension

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