如何将第一级索引分组并将函数应用于Pandas中的第二个索引

时间:2012-09-19 08:09:24

标签: python pandas

我有多级数据帧'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().我想在一个命令中执行此操作,怎么办?

2 个答案:

答案 0 :(得分:2)

您可以使用索引的set_levels方法更改给定级别的值。因此,对于给定的funclevel,您可以执行以下操作:

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