【发布时间】:2020-11-05 16:06:28
【问题描述】:
我在 Pandas 文档或 SO 中找不到此内容,但是如何将具有多索引列的 Pandas 数据框中的某些列从级别 0 移动到级别 1?我不想交换它们或重新排序它们,我只想将选定的列从级别 0 移动到级别 1,以便这些列最终在级别 1 中复制。所以我最初的数据框看起来像这样
A B C X Y Z
X1 X2 Y1 Z1
a b c x1 x2 y1 z1
.. .. .. .. .. .. ..
我想移动列 A、B 和 C 以跨级别复制 X、Y 和 Z 以生成类似的内容
X Y Z
X1 X2 A B C Y1 A B C Z1 A B C
x1 x2 a b c y1 a b c z1 a b c
.. .. .. .. .. .. .. .. .. .. .. .. ..
我尝试通过循环 X、Y 和 Z 并为每个列分配 A、B 和 C 以简单的方式做到这一点,但这不适用于我。所以下面这行不通。
for level in ['X', 'Y', 'Z']:
df[level] = df[level].assign(A=df['A'], B=df['B'], C=df['C']
要重现上面的原始示例数据框,请使用此代码
import pandas as pd
data = [['a', 'b', 'c', 'x1', 'x2', 'y1', 'z1']]
columns = pd.MultiIndex.from_tuples(
[
('A',''),
('B', ''),
('C', ''),
('X', 'X1'), ('X', 'X2'),
('Y', 'Y1'),
('Z', 'Z1')
]
)
df = pd.DataFrame(data=data, columns=columns)
所以输入数据框(为简单起见只有一个数据行)如下所示。
>>> df
A B C X Y Z
X1 X2 Y1 Z1
0 a b c x1 x2 y1 z1
【问题讨论】:
-
请提供样本数据。由于您的数据具有多索引,因此最好提供复制/生成数据的代码。
-
我无法共享数据。从示例中的模式应该清楚正在尝试什么 - 将列从一个级别移动到另一个级别。实际数据无关紧要,可以是任何东西、字符串、数字等。
-
我不是要你分享你的数据。我要求您提供生成模拟数据的代码。
-
请参考this question。
-
我在上面添加了示例数据框创建代码。