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

发布于 2025-01-11 05:36:24 字数 423 浏览 0 评论 0原文

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

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

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

I think this is a basic question but I have not been able to find a usable solution yet. I have some data that is multi-index by month and year as in this attached figure
dataframe
I want to do some transformations on some columns for each year and month. Let's say I have some function:

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

So I would like to apply this function to some column (say, vol) for every month of every year, rather than for all the data at once. Can someone help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感受沵的脚步 2025-01-18 05:36:24

您可以使用 GroupBy.transform,因为函数返回Series

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

这里的替代方案是:

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

You can use GroupBy.transform, because function return Series:

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

Alternative here is:

df['new'] = df['vol'].div(df.groupby(['year','month'])['vol'].transform('max'))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文