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

标签 python pandas multi-index

我确实有以下数据框:

{'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/

相关文章:

python - Pandas - 检查多索引数据帧的任何索引中是否存在列的值

python的lxml和iterparse方法

Python 3.5 ctypes libc printf() 仅打印字符串的第一个字节 Windows 7/10

python - 如果使用 unicode 字符,从数据库中选择问题

python - Pandas 将一天中的所有值设置为当天某个时间的数据

python - 循环遍历 excel 文件做一些事情并将它们保存到新文件夹 python pandas

c++ - 使用基于嵌套值的索引 boost 多索引容器

python - 将颜色向量传递给 matplotlib-Basemap

python - Pandas:重置非唯一索引的索引

python - 将 Pandas 多索引数据框 reshape 为多列