我的数据框的索引类似于
MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F', 'G'], [0, 1]],
labels=[[0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6], [0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]],
names=['I1', 'I2'])
现在我想应用一个函数来索引I1。 如果它是一个简单的列,我会做类似的事情
df['I1'] = df['I1'].apply(lamdba x :...)
如何将此应用于具有多索引的df中的索引?
答案 0 :(得分:1)
我认为需要rename
:
df = df.rename(lambda x: 'a' + x, level=0)
或Index.get_level_values
选择级MultiIndex
,map
,然后创建MultiIndex.from_arrays
:
idx = df.index.get_level_values('I1').map(lambda x: 'a' + x)
df.index = pd.MultiIndex.from_arrays([idx, df.index.get_level_values('I2')])
因为我得到了:
df.index = df.index.set_levels(idx, level='I1')
ValueError:级别值必须是唯一的:['aA','aA','aB','aB','aC','aD','aD','aE','aE','aF ','aF','aG','aG']在0级
<强>示例强>:
mux = pd.MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F', 'G'], [0, 1]],
labels=[[0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6], [0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]],
names=['I1', 'I2'])
df = pd.DataFrame([0] * 13, index=mux, columns=['a'])
df = df.rename(lambda x: 'a' + x, level=0)
print(df)
a
I1 I2
aA 0 0
1 0
aB 0 0
1 0
aC 1 0
aD 0 0
1 0
aE 0 0
1 0
aF 0 0
1 0
aG 0 0
1 0