gpt4 book ai didi

python - Pandas ,将多索引之一移动到多列索引之上

转载 作者:行者123 更新时间:2023-11-28 16:33:50 25 4
gpt4 key购买 nike

如果我有一个数据框的多级列和多级索引

column_level1               a1      | a2
----+----|----+----
column_level2 b1 | b2 | b3 | b4

index1 | index2 | index3
-------+--------+--------+-----+----+----+-----
0 | c1 | d1 | 1 | 2 | 3 | 4 |
0 | c2 | d3 | 5 | 6 | 7 | 8 |

如何 reshape 数据框以将其中一个索引移动到 columns_level 之上?比方说,我想将我当前的 index2 放在 column_level0 上。

我还需要一些有效的解决方案来解决这个问题。

我目前的解决方案是按以下方式使用堆栈/取消堆栈:

df.stack().stack().unstack(index2).unstack().unstack()

但是在大​​型数据帧上使用这种实现方式最终会消耗大量 RAM 并花费大量时间。

最佳答案

如果你有:

import numpy as np
import pandas as pd

columns = pd.MultiIndex.from_arrays([['a1','a1','a2','a2'], ['b1','b2','b3','b4']])
index = pd.MultiIndex.from_tuples([(0,'c1','d1'), (0, 'c2', 'd3')])
df = pd.DataFrame(np.arange(1,9).reshape(2,-1), columns=columns, index=index)
# a1 a2
# b1 b2 b3 b4
# 0 c1 d1 1 2 3 4
# c2 d3 5 6 7 8

然后您可以使用 reorder_levels 来避免(大部分)那些堆栈/取消堆栈调用:

df.unstack(level=1).reorder_levels([2,0,1], axis=1)

产量

      c1  c2  c1  c2  c1  c2  c1  c2
a1 a1 a1 a1 a2 a2 a2 a2
b1 b1 b2 b2 b3 b3 b4 b4
0 d1 1 NaN 2 NaN 3 NaN 4 NaN
d3 NaN 5 NaN 6 NaN 7 NaN 8

关于python - Pandas ,将多索引之一移动到多列索引之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com