Как заменить значения индексов фрейма данных по условию?
Хочу выполнить следующую последовательность действий:
- Из имеющегося фрейма данных надо взять по условию индекса только нужные мне данные
- Заменить значения индексов по условию другими, нужными мне значениями
С первым пунктом получилось справиться успешно, но со 2 ерунда какая-то получается.
d N1 N2 N3
aa 12 12 5
bb 27 29 25
cc 26 27 18
aa 23 31 20
bb 24 25 23
cc 27 17 33
aa 22 18 28
bb 23 24 20
cc 21 19 19
Получилось сделать только как-то так, но подозреваю, что есть способ гораздо коороче, да и этот способ дает дубликат столбца с индексом:
df = pd.read_excel('BB.xlsx', sheet_name='Лист10')
df.loc[df['d'] == 'cc', 'd'] = 'data1'
df.loc[df['d'] == 'aa', 'd'] = 'data2'
df.set_index(df['d'],inplace=True)
df_torg = df.loc[df.index.isin(['data1','data2'])]
df_torg.set_index(df_torg['d'],inplace=True)
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
mapping = {"cc": "data1", "aa": "data2"}
idx = list(mapping.keys())
res = df.query("data in @idx").reset_index().replace(mapping).set_index("data")
результат:
In [90]: res
Out[90]:
N1 N2 N3
data
data2 12 12 5
data1 26 27 18
data2 23 31 20
data1 27 17 33
data2 22 18 28
data1 21 19 19