gpt4 book ai didi

python - Pandas 对行的多级索引

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:59 25 4
gpt4 key购买 nike

我正在尝试转换此 DataFrame:

>>> df
D1 D2
S1 S2 S1 S2
0 -4 1 -6
1 -5 2 -7
3 -8 3 -9

类似于:

>>> df
0 1 2 3
D1 -4 -5 NaN -8
D2 NaN -6 -7 -9

基本上 (D1,S1)(D2,S1) 列中的值需要合并到列名中,(D1) 列中的值,S2)(D2,S2) 成为唯一的数据值。

我怎样才能简单有效地实现这一点?

最佳答案

所需的 DataFrame 在索引中有 Dstack 将列级值移动到索引中。所以很自然地想到调用stack:

In [43]: result = df.stack(level=0); result
Out[43]:
S1 S2
0 D1 0 -4
D2 1 -6
1 D1 1 -5
D2 2 -7
2 D1 3 -8
D2 3 -9

所需的 DataFrame 在索引中只有 D,所以让我们删除外层值:

In [44]: result.index = result.index.droplevel(0); result
Out[44]:
S1 S2
D1 0 -4
D2 1 -6
D1 1 -5
D2 2 -7
D1 3 -8
D2 3 -9

我们现在希望 S1 列成为列级别的值。这可以通过首先将 S1 列移动到索引中来完成,

In [45]: result = result.set_index('S1', append=True); result
Out[45]:
S2
S1
D1 0 -4
D2 1 -6
D1 1 -5
D2 2 -7
D1 3 -8
D2 3 -9

然后调用unstack将索引级别移动到列级别:

In [46]: result = result.unstack('S1'); result
Out[46]:
S2
S1 0 1 2 3
D1 -4 -5 NaN -8
D2 NaN -6 -7 -9

综合来看,

import pandas as pd
df = pd.DataFrame({('D1', 'S1'): [0, 1, 3],
('D1', 'S2'): [-4, -5, -8],
('D2', 'S1'): [1, 2, 3],
('D2', 'S2'): [-6, -7, -9]})

result = df.stack(level=0)
result.index = result.index.droplevel(0)
result = result.set_index('S1', append=True)
result = result.unstack('S1')
result.columns = result.columns.droplevel(0)
print(result)

产量

S1   0  1   2  3
D1 -4 -5 NaN -8
D2 NaN -6 -7 -9

供引用:四种基本的DataFrame reshape 操作是

它们是基础,因为 DataFrame 只是一个带有索引和列的数组水平。这些运算符允许您将值从数组移动到索引级别到列级别并返回。以各种方式组合这4种操作可以解决了很多 DataFrame reshape 问题。

关于python - Pandas 对行的多级索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31962336/

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