在多索引数据帧上使用函数

Using functions on multi-indexed dataframe

我认为这是一个基本问题,但我还没有找到可用的解决方案。我有一些按月和按年的多索引数据,如附图所示 我想对每个 yearmonth 的某些列进行一些转换。假设我有一些功能:

def foo(series):
   return series/series.max()

所以我想将此函数应用于每年每个月的某些列(例如,vol),而不是一次针对所有数据。有人可以帮忙吗?

您可以使用 GroupBy.transform,因为函数 return Series:

df['new'] = df.groupby(['year','month'])['vol'].transform(foo)

替代方法是:

df['new'] = df['vol'].div(df.groupby(['year','month'])['vol'].transform('max'))