python - 将 pandas 的元组列转换为 MultiIndex

标签 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 循环的情况,而且性能不是问题,所以如果解决方案保留这种 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

最佳答案

您可以使用concat使用列表理解:

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

关于python - 将 pandas 的元组列转换为 MultiIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675679/

相关文章:

python - 我可以打开 jupyter 笔记本,但无法在 Mac 上运行包含 python 脚本的笔记本

Python 正则表达式 - 如何从通配符表达式中捕获多个组?

python - 将 groupby 或 datetime 对象转换/分割并转置为数据帧

python - Pandas 分组并根据条件添加列数据

python - 如何在 matplotlib 上强制设置 x 刻度,或设置没有年份的日期时间类型

r - 将 "missed"数字的数据帧转换为数字 "hit"的数据帧

python - 如何使用levenshtein函数删除pandas中的相似值

Python:将不同回归的估计系数存储在单个矩阵中

python - 如何在 pandas 中读取带有空单元格的 pretty-print 表格?

python - 动态评估 Pandas 公式中的表达式?