Багато відповідей повертають Індекс як масив, який втрачає інформацію про ім'я індексу тощо (хоча ви могли б це зробити pd.Series(index.map(myfunc), name=index.name)
). Це також не буде працювати для MultiIndex.
Я працював із цим, використовуючи "перейменувати":
mix = pd.MultiIndex.from_tuples([[1, 'hi'], [2, 'there'], [3, 'dude']], names=['num', 'name'])
data = np.random.randn(3)
df = pd.Series(data, index=mix)
print(df)
num name
1 hi 1.249914
2 there -0.414358
3 dude 0.987852
dtype: float64
rename_dict = {i: i*100 for i in df.index.get_level_values('num')}
rename_dict.update({i: i+'_yeah!' for i in df.index.get_level_values('name')})
df = df.rename(index=rename_dict)
print(df)
num name
100 hi_yeah! 1.249914
200 there_yeah! -0.414358
300 dude_yeah! 0.987852
dtype: float64
Єдина хитрість із цим полягає в тому, що у вашому індексі повинні бути унікальні мітки ч / б різних рівнів мультиіндексу, але, можливо, хтось розумніший за мене знає, як це обійти. Для моїх цілей це працює в 95% випадків.
df.index.map(foo)
роботу?