python - Pandas:如何通过拆分从一个多索引级别向多索引添加一个级别?

标签 python pandas

如何通过在 | 处拆分第二层来创建新层?

初始索引:

enter image description here

MultiIndex(levels=[['A', 'B', 'C', 'D'], ['a|a_unit', 'b|b_unit', 'c|c_unit']],
       codes=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])

期望的输出:

enter image description here

我尝试过的:

# plan was to create a new column and use set_index
df.columns.to_frame().iloc[:,1].str.split('|')

编辑: 我的方法不起作用的原因如下:

最初,我将索引的级别 1 中的值用“|”分隔,为了简化此示例,我删除了 *。没有启动一切正常,但启动后,我得到了一个 re 错误:

re.error: nothing to repeat at position 0

拥有合适的测试用例有时真的很棘手。

最佳答案

你可以试试:

s=df.columns.to_frame().iloc[:,1].str.split('|')
final=(pd.DataFrame(data=df.values,columns=df.columns.get_level_values(0))
                   .T.set_index([s.str[0],s.str[1]],append=True).T)

或者:

final=(pd.DataFrame(columns=
 pd.MultiIndex.from_arrays([df.columns.get_level_values(0),s.str[0],s.str[1]])))

enter image description here

关于python - Pandas:如何通过拆分从一个多索引级别向多索引添加一个级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449320/

相关文章:

python - 两个列表的组合(不是按元素的)

python - Groupby 序列计数和序列持续时间

python - 根据列表中的部分匹配字符串过滤 DataFrame

python - 选项 auto_now、auto_now_add 和 default 是互斥的。可能只存在这些选项之一

python - pandas HDFStore - 如何重新打开?

python - 如何复制数据框中的条目

python - 编写此代码的高效且简洁的方法 - Pandas

python - 如何在 numpy 中推广元素矩阵运算

python - 将分类数据转换为虚拟集

javascript - 在 Django 中做 ajax 的更好方法