[英]Swap level-one from index with column level (Pandas Multiindex Dataframe)
我有一个多索引的 pandas.Dataframe,它是这样的:
BAZ PAL
Foo Bar
124 1 A B
2 C D
134 1 E F
2 G H
我需要以适当的方式将索引中的第一级与列交换。 我需要得到这样的结果:
124 134
Coo Bar
BAZ 1 A E
2 C G
PAL 1 B F
2 D H
您需要取消堆叠现有的索引级别Foo
,堆叠所需的列 'Coo',然后重新排列索引级别。 交换索引级别后,您可能想要对其进行排序。 最后,您可能希望删除所有值 ( val
) 的列名。
df = (pd.DataFrame({'Foo': [124, 124, 134, 134] * 2,
'Bar': [1, 2, 1, 2] * 2,
'Coo': ['BAZ'] * 4 + ['PAL'] * 4,
'val': list('ACEGBDFH')})
.set_index(['Foo', 'Bar', 'Coo'])
.unstack('Coo'))
>>> df
val
Coo BAZ PAL
Foo Bar
124 1 A B
2 C D
134 1 E F
2 G H
df = df.unstack('Foo').stack('Coo')
df.index = df.index.swaplevel(0, 1)
>>> df
val
Foo 124 134
Coo Bar
BAZ 1 A E
PAL 1 B F
BAZ 2 C G
PAL 2 D H
df.sort_index(inplace=True)
>>> df
val
Foo 124 134
Coo Bar
BAZ 1 A E
2 C G
PAL 1 B F
2 D H
df.columns = df.columns.droplevel()
>>> df
Foo 124 134
Coo Bar
BAZ 1 A E
2 C G
PAL 1 B F
2 D H
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.