Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将元组列转换为多索引_Python_Pandas_Dataframe_Jupyter Notebook_Multi Index - Fatal编程技术网

Python 将元组列转换为多索引

Python 将元组列转换为多索引,python,pandas,dataframe,jupyter-notebook,multi-index,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','gras

因此,我的代码的组织结构类似于以下内容。它将创建填充元组的列:

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)

根据这个例子,每个元组的元素是相关的,这里是捕食者和猎物。我真的不想把这些元组分割成不相关的独立列,而是希望这些元组对之间的密切关系以某种方式留在结构中

问题是,我的示例中的每个字符串都比这里的动物名称长一点,当我在Jupyter笔记本中查看数据帧时,我根本看不到元组的第二个元素,我需要能够看到它,甚至选择它等等

所以最初认为Jupyter中可能有一些设置,它将使每个元组元素进入第二行。现在我认为最好的解决方案可能是使用,但我在解决如何使用它时遇到了很多困难。看了几个例子和例子

有人知道怎么做吗?列标题应该有两个级别,例如家养捕食者/猎物和元组元素进入每个新的子列

我尽量不在Pandas和NumPy中使用for循环,但在这种情况下,很难不使用for循环,而且性能也不是问题,因此我更愿意使用这种创建数据帧的for循环友好方法

编辑-这里是所需的输出

您可以与
列表理解一起使用

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

谢谢,它很管用!我正在研究具体的方法。查看了
df.values.T.tolist()
,这是我第一次看到列表理解与
pd.DataFrame
命令一起使用。我认为,
keys
think you used是它所做的,看起来它根本不需要多索引的东西。
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