熊猫:使用替换方法多次修改特定级别的Multiindex

时间:2018-11-08 09:20:26

标签: python pandas dataframe multi-index

我试图多次使用replace方法,以更改给定级别的多索引熊猫数据帧的指标。

如此处所示:Pandas: Modify a particular level of Multiindex,只要使用一次replace方法,@ John就能很好地解决问题。

问题是,如果我多次使用此方法,它将不起作用。 例如

df.index = df.index.set_levels(df.index.levels[0].str.replace("dataframe_",'').replace("_r",' r'), level=0)

我收到以下错误消息:

AttributeError: 'Index' object has no attribute 'replace'

我想念什么?

1 个答案:

答案 0 :(得分:2)

两次使用str.replace

idx = df.index.levels[0].str.replace("dataframe_",'').str.replace("_r",' r')
df.index = df.index.set_levels(idx, level=0)

另一种解决方案是先按字典将to_series转换为replace

d = {'dataframe_':'','_r':' r'}
idx = df.index.levels[0].to_series().replace(d)
df.index = df.index.set_levels(idx, level=0)

如果重要的是大数据和性能,则使用mapfillna解决方案:

d = {'dataframe_':'','_r':' r'}
s = df.index.levels[0].to_series()
df.index = df.index.set_levels(s.map(d).fillna(s), level=0)

示例

df = pd.DataFrame({
        'A':['dataframe_','_r', 'a'],
        'B':[7,8,9],
        'C':[1,3,5],

}).set_index(['A','B'])

print (df)
              C
A          B   
dataframe_ 7  1
_r         8  3
a          9  5

d = {'dataframe_':'','_r':' r'}
idx = df.index.levels[0].to_series().replace(d)
df.index = df.index.set_levels(idx, level=0)
print (df)
      C
A  B   
   7  1
 r 8  3
a  9  5