我有一个多索引的pandas.Dataframe,它是这样的:
BAZ PAL
Foo Bar
124 1 A B
2 C D
134 1 E F
2 G H
Run Code Online (Sandbox Code Playgroud)
我需要以适当的方式将index中的level-one与列交换.我需要最终得到这样的东西:
124 134
Coo Bar
BAZ 1 A E
2 C G
PAL 1 B F
2 D H
Run Code Online (Sandbox Code Playgroud)
您需要取消堆叠现有的索引级别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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3400 次 |
| 最近记录: |