python - MultiIndex DataFrame 中基于现有列级别值的新级别

标签 python pandas multi-index

假设我有一个像这样的 DataFrame:

df = pd.DataFrame(data = [[1,2,3,4,5,6], [3,4,5,6,7,8]], 
                  columns = pd.MultiIndex.from_product([('A1', 'B1', 'A2'), (10,20)], names=['level_0','level_1']))

它是这样的: DataFrame image

我想在包含 1 的列中添加新级别,其中 level_0 值包含 “1”2,其中 level_0 值包含 "2"。所以,基本上:

  • 其中 level_0 == "A1" --> new_level = 1
  • 其中 level_0 == "B1" --> new_level = 1
  • 其中 level_0 == "A2" --> new_level = 2

关于如何做到这一点有什么建议吗?

最佳答案

使用 lsit 理解从第一级值中提取数字,并通过 MultiIndex.from_tuples 创建新的 MultiIndex :

import re

df.columns = pd.MultiIndex.from_tuples([(re.findall(r'(\d+)$', x[0])[0], *x) 
                                         for x in df.columns.tolist()], 
                                       names=('new_level',*df.columns.names))
print (df)

new_level  1           2   
level_0   A1    B1    A2   
level_1   10 20 10 20 10 20
0          1  2  3  4  5  6
1          3  4  5  6  7  8

关于python - MultiIndex DataFrame 中基于现有列级别值的新级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71123352/

相关文章:

python - DatetimeIndex 偏移量

python - 创建 DataFrame 后设置 pandas DatetimeIndex 的频率

python Pandas :get rolling value of one Dataframe by rolling index of another Dataframe

python - numpy 中点的规范表示是什么?

python - 将 .so 库加载到 ctypes 中

python - 沿指定轴的两个 3D 矩阵之间的 np.dot 乘积

matplotlib - 如何从 Pandas 数据框中提取日期索引以用作 matplotlib 中的 x 轴

python - 如何使用 lambda 函数更改 pandas df 中任意列的名称?

python - 从现有数据框创建多索引

pandas - 对多个数据帧进行数据分析?面板还是多索引?