python - Pandas:修改特定级别的Multiindex,多次使用replace方法
问题描述
我试图多次使用 replace 方法来更改给定级别的多索引熊猫数据框的索引。
如此处所示:Pandas:修改特定级别的 Multiindex,@John 得到了一个效果很好的解决方案,只要使用一次 replace 方法。
问题是,如果我多次使用这种方法,它就不起作用。例如
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'
我错过了什么?
解决方案
使用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)
如果大数据和性能很重要,则使用map
and的解决方案:fillna
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
推荐阅读
- jmeter - JMeter - 如何验证正则表达式后的文件扩展名无效并记录它
- ms-access - 自定义数字格式女士访问
- python - 使用羽化格式包出错
- typescript - 受保护属性的通用 getter 和 setter
- java - 如何在 Bazel 中为 Android 项目添加 Maven 依赖项(例如 Volley、Gson)?
- python - 使用 gevent.spawn 时弹出错误的应用程序上下文
- java - 我可以在 JPA 中使用占位符值获取 SQL 查询吗
- javascript - 在客户端 React 中添加 ld+json 脚本标签
- python - python:插值:找到一个最少包含一个点的矩形
- javafx - 在 Borderpane fxml Javafx 中添加一个窗格