将元组的 pandas 列转换为 MultiIndex
convert pandas column of tuples to 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)
按照这个例子,每个元组的元素都是相关的,这里是捕食者和猎物。我真的不想将这些元组拆分成不相关的单独列,希望这些元组之间的密切关系以某种方式保留在结构中。
问题是,我示例中的每个字符串都比这里的动物名称长一点,当我在 Jupyter notebook 中查看数据框时,我根本看不到元组的第二个元素,我需要能够看到它,甚至 select 它等
所以最初认为 Jupyter 中可能有一些设置会使每个元组元素进入第二行。现在认为最好的解决方案可能是 pd.MultiIndex.from_tuples() but am having a lot of trouble working out how to use it. Had a look at a few examples and 。
有人知道怎么做吗?应该有两级列标题,例如 domestic-predator/prey 并且元组元素进入每个新的 sub-column.
我尽量不在 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
您可以将 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
因此我的代码组织方式类似于以下内容。它创建充满元组的列:
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 notebook 中查看数据框时,我根本看不到元组的第二个元素,我需要能够看到它,甚至 select 它等
所以最初认为 Jupyter 中可能有一些设置会使每个元组元素进入第二行。现在认为最好的解决方案可能是 pd.MultiIndex.from_tuples() but am having a lot of trouble working out how to use it. Had a look at a few examples
有人知道怎么做吗?应该有两级列标题,例如 domestic-predator/prey 并且元组元素进入每个新的 sub-column.
我尽量不在 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
您可以将 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