Python 具有多索引列的数据帧-将列从级别0移动到级别1(不交换或重新排序)
我在Pandas文档中找不到这一点,但是如何将包含多索引列的Pandas数据帧中的某些列从级别0移动到级别1?我不想交换它们或对它们重新排序,我只想将所选列从级别0移动到级别1,以便这些列最终在级别1中复制。所以我最初使用的数据帧是这样的Python 具有多索引列的数据帧-将列从级别0移动到级别1(不交换或重新排序),python,pandas,dataframe,Python,Pandas,Dataframe,我在Pandas文档中找不到这一点,但是如何将包含多索引列的Pandas数据帧中的某些列从级别0移动到级别1?我不想交换它们或对它们重新排序,我只想将所选列从级别0移动到级别1,以便这些列最终在级别1中复制。所以我最初使用的数据帧是这样的 A B C X Y Z X1 X2 Y1
A B C X Y Z
X1 X2 Y1 Z1
a b c x1 x2 y1 z1
.. .. .. .. .. .. ..
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
.. .. .. .. .. .. .. .. .. .. .. .. ..
我想移动列A
、B
和C
,在X
、Y
和Z
之间进行复制,以产生类似的结果
A B C X Y Z
X1 X2 Y1 Z1
a b c x1 x2 y1 z1
.. .. .. .. .. .. ..
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
您可以这样做:
move = ['A', 'B', 'C']
keep = ['X', 'Y', 'Z']
for item in keep:
for key in move:
df[(item, key)] = df[key]
df = df.drop(move, axis=1)
df
这将导致:
如果在打印数据框之前再添加一行,则会得到所需的结果:
df.sort_index(1, level=0, inplace=True)
df
请提供一份样本数据。由于您的数据具有多索引,最好提供复制/生成数据的代码。我无法共享数据。从示例中的模式中应该可以清楚地看到尝试了什么—将列从一个级别移动到另一个级别。实际的数据并不重要,它可以是任何东西,字符串,数字等等。我不是要求你分享你的数据。我要求您提供生成模拟数据的代码。请参阅。我已在上面添加了示例数据框创建代码。好的,看起来这会在每个部分的末尾追加
A
、B
、C
,但我正在寻找一种更内置的方法。行排序与列排序不匹配。