gpt4 book ai didi

python - Pandas:修改特定级别的 Multiindex

转载 作者:IT老高 更新时间:2023-10-28 20:40:39 27 4
gpt4 key购买 nike

我有一个带有 Multiindex 的数据框,并且想修改 Multiindex 的一个特定级别。例如,第一级可能是字符串,我可能想从该索引级别删除空格:

df.index.levels[1] = [x.replace(' ', '') for x in df.index.levels[1]]

但是,上面的代码导致错误:

TypeError: 'FrozenList' does not support mutable operations.

我知道我可以 reset_index 并修改列,然后重新创建 Multiindex,但我想知道是否有更优雅的方法可以直接修改 Multiindex 的一个特定级别。

最佳答案

感谢@cxrodgers 的评论,我认为最快的方法是:

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

旧的、更长的答案:

我发现@Shovalt 建议的列表理解有效,但在我的机器上感觉很慢(使用超过 10,000 行的数据框)。

相反,我可以使用 .set_levels 方法,这对我来说要快一些。

%timeit pd.MultiIndex.from_tuples([(x[0].replace(' ',''), x[1]) for x in df.index])
1 loop, best of 3: 394 ms per loop

%timeit df.index.set_levels(df.index.get_level_values(0).str.replace(' ',''), level=0)
10 loops, best of 3: 134 ms per loop

实际上,我只需要添加一些文本。 .set_levels 会更快:

%timeit pd.MultiIndex.from_tuples([('00'+x[0], x[1]) for x in df.index])
100 loops, best of 3: 5.18 ms per loop

%timeit df.index.set_levels('00'+df.index.get_level_values(0), level=0)
1000 loops, best of 3: 1.38 ms per loop

%timeit df.index.set_levels('00'+df.index.levels[0], level=0)
1000 loops, best of 3: 331 µs per loop

此解决方案基于@denfromufa 评论链接中的答案...

python - Multiindex and timezone - Frozen list error - Stack Overflow

关于python - Pandas:修改特定级别的 Multiindex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com