3

我有这样的多级数据框'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)

结果会像这样:

             col1 col2
first second
a        0    5    5
         10   5    5
         20   5    5
b        0    5    5
         10   5    5

上述命令不适用于second不是列,因此.secondPandas 不接受。

我不想这样做df.reset_index(),blablabla ...,最后df.set_index().我更喜欢在一个命令中做到这一点,怎么办?

4

2 回答 2

2

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

new_values = map(func, df.index.get_level_values(level))
df.index.set_levels(new_values, level, inplace=True)
于 2015-09-16T09:49:59.320 回答
1

创建 DataFrame 时,您可以按如下方式设置 MultiIndex:

df.set_index(['first', 'second'], drop=False)

这样,索引列不会被删除,您的apply.

于 2012-09-19T09:26:44.587 回答