gpt4 book ai didi

python - 如何在 MultiIndex Groupby 中高效执行乘法

转载 作者:行者123 更新时间:2023-12-01 23:28:34 25 4
gpt4 key购买 nike

我正在尝试使用我的两个二级指标来计算第三个指标。但是,我找不到执行此操作的惯用方法。

如何从另外两个二级指标计算出一个二级指标?每组具有相同的二级指标。

我的代码


import numpy as np
import pandas as pd

# Create index
tickers = ['A', 'B', 'C']
line_items = ['sales', 'ebitda_margin', 'ebitda', 'other_field']
index = pd.MultiIndex.from_product([tickers, line_items], names=['ticker', 'line_item'])

df = pd.DataFrame([100, 0.3, np.nan, 7, 200, 0.2, np.nan, 8, 300, 0.1, np.nan, 9],
index=index,
columns=[0])

# Let's assume 10% sales growth for all companies
# This is included to show that I am doing this calculation for multiple years (columns)
df[1] = df[0]
df.loc[pd.IndexSlice[:, 'sales'], 1] *= 1.1

这会产生以下数据框:

                          0      1
ticker line_item
A sales 100.0 110.0
ebitda_margin 0.3 0.3
ebitda NaN NaN
other_field 7.0 7.0
B sales 200.0 220.0
ebitda_margin 0.2 0.2
ebitda NaN NaN
other_field 8.0 8.0
C sales 300.0 330.0
ebitda_margin 0.1 0.1
ebitda NaN NaN
other_field 9.0 9.0

我有什么

请注意,我知道我需要对索引进行一些处理才能使下面的代码正常工作,但我宁愿找到一种更好的方法(如果存在的话)也不愿使用此代码。

df.apply(lambda x: x.loc[pd.IndexSlice[:, 'sales']] * x.loc[pd.IndexSlice[:, 'ebitda_margin']])

有更好的方法吗?

最佳答案

尝试使用 xs 作为 pd.IndexSlice 的替代方法,您可以在其中删除一个级别,然后使用 mul 允许在乘法时对齐级别:

df.loc[pd.IndexSlice[:, 'sales'],:] = (df.loc[pd.IndexSlice[:, 'sales'],:]
.mul(df.xs('ebitda_margin', level='line_item'), level=0)
)

输出:

                         0
ticker line_item
A sales 30.0
ebitda_margin 0.3
ebitda NaN
other_field 7.0
B sales 40.0
ebitda_margin 0.2
ebitda NaN
other_field 8.0
C sales 30.0
ebitda_margin 0.1
ebitda NaN
other_field 9.0

关于python - 如何在 MultiIndex Groupby 中高效执行乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66770102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com