我有多级数据帧'df',如下所示:
col1 col2
first second
a 0 5 5
1 5 5
2 5 5
b 0 5 5
1 5 5
我想将一个函数func
(exp:'lambda x: x*10'
)应用于second
,有点像:
df.groupby(level='first').second.apply(func)
结果将像lokk:
col1 col2
first second
a 0 5 5
10 5 5
20 5 5
b 0 5 5
10 5 5
上述命令对second
不起作用不是列,因此Pandas不接受.second
。
我不想通过df.reset_index()
,blablabla ......,然后最终df.set_index().
我想在一个命令中执行此操作,怎么办?
答案 0 :(得分:2)
您可以使用索引的set_levels
方法更改给定级别的值。因此,对于给定的func
和level
,您可以执行以下操作:
new_values = map(func, df.index.get_level_values(level))
df.index.set_levels(new_values, level, inplace=True)
答案 1 :(得分:0)
创建DataFrame时,您可以按如下方式设置MultiIndex:
df.set_index(['first', 'second'], drop=False)
这样,索引列不会被删除,仍然可以访问apply
。