假设我有一个像这样的 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/