我有以下index1年份和index2类型的df。
data
year type
2017 A 1.23
B 5.51
2018 A 1.53
B 0.89我想重命名索引年,使其表示年份0和年份1。
我尝试了以下几点:
index_years = []
for i in range(len(df.index.levels[0])):
index_years.append("Year " + str(i))
df.index.levels[0] = index_years但我得到了以下错误:
ERROR GIVEN: 'FrozenList' does not support mutable operations.然后我试了一下
pd.MultiIndex.from_tuples([(x[0].apply("Year " + str(i) for i in range(len(df.index.levels[0]))), x[1]) for x in df.index])但是它给出了一个错误"int" boject is not subscriptible
我想得到的结果是:
data
year type
Year 0 A 1.23
B 5.51
Year 1 A 1.53
B 0.89发布于 2019-07-30 10:14:28
您已经间接地这样做了,参见here (顺便说一句,这是对其他问题的重复)
# remove 'year' and 'type' from index
df = df.reset_index()
# do changes to year
df.year = df.year.apply(lambda x: 'Year %i' %(x-2017))
# set 'year' and 'type'as indices
df = df.set_index(['year', 'type'])发布于 2019-07-30 00:42:49
有一个名为index.names的属性,您可以使用它来设置名称。下面是一个示例:
import pandas as pd
df = pd.DataFrame({'year':['2017','2017', '2018', '2018'],
'type':['A', 'B', 'A', 'B'],
'data':[1.23,5.51, 1.53, 0.89]
})
df = df.set_index(['year', 'type'])
# Here is the code to modify the DataFrame as you wanted
df = df.reset_index() #reset index so you can access the year as a column and have an integer index you can use
df.year = df.index.map(lambda x: f'year {x}') #map using a function to create new values for year that you need
df = df.set_index(['year', 'type']) #recreate the multilevel index
dfhttps://stackoverflow.com/questions/57252772
复制相似问题