gpt4 book ai didi

python - Pandas ,重命名多索引列(数据顺序已更改)

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:31 25 4
gpt4 key购买 nike

我确实有以下数据框:

{'e1.data_280': {0: 10, 1: 20, 2: 30},
'e1.data_603': {0: 7, 1: 8, 2: 9},
'e2.data_280': {0: 30, 1: 20, 2: 10},
'e2.data_603': {0: 8, 1: 9, 2: 1}}

之后:

df.columns = df.columns.str.split('.', expand=True)

看起来像:

enter image description here

现在我想摆脱短语data_:

获取下划线后面的三位数字:

cols = [item.split('_')[1] for item in df.columns.get_level_values(1)]
cols
['603', '280', '603', '280']

如果我更换旧标签:

df.columns.set_levels(cols, level=1, inplace=True)

数据改变了:

enter image description here

我看到 cols 的条目数多于级别 1 的多索引名称:

MultiIndex(levels=[['e1', 'e2'], ['data_280', 'data_603']],
labels=[[0, 0, 1, 1], [1, 0, 1, 0]])

但是如何重命名数据框中的第一级多索引列?

编辑:解决方法

df.unstack().reset_index()

与重命名列和拆分列值一起工作:

最佳答案

设置

df = pd.DataFrame({
'e1.data_280': {0: 10, 1: 20, 2: 30},
'e1.data_603': {0: 7, 1: 8, 2: 9},
'e2.data_280': {0: 30, 1: 20, 2: 10},
'e2.data_603': {0: 8, 1: 9, 2: 1}})

选项 1
最简单的事情就是将其包含在您的第一次拆分中。

df = pd.DataFrame({
'e1.data_280': {0: 10, 1: 20, 2: 30},
'e1.data_603': {0: 7, 1: 8, 2: 9},
'e2.data_280': {0: 30, 1: 20, 2: 10},
'e2.data_603': {0: 8, 1: 9, 2: 1}})

df.columns = df.columns.str.split('.data_', expand=True)

df

e1 e2
280 603 280 603
0 10 7 30 8
1 20 8 20 9
2 30 9 10 1

选项 2
事实上,你可以做

df.rename(columns=lambda x: x.replace('data_', ''))

e1 e2
280 603 280 603
0 10 7 30 8
1 20 8 20 9
2 30 9 10 1

您甚至可以通过传递一个级别来缩小重命名的范围。这确保我们不会对 level=0 列对象执行 replace

df.rename(columns=lambda x: x.replace('data_', ''), level=1)

e1 e2
280 603 280 603
0 10 7 30 8
1 20 8 20 9
2 30 9 10 1

关于python - Pandas ,重命名多索引列(数据顺序已更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414788/

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