在python中使用乘积和平均公式创建损失率表

2024-05-13 07:56:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从python中已有的流量数据框中创建损失率表(见下文)。如果有人能帮我写代码,我将不胜感激。我复制了下面的excel公式,但如果您需要更多信息,请告诉我

损失率表B8单元格中的excel公式为=PRODUCT(B2:$H$2)。此公式已应用于整个表,例如在单元格C3中,我使用了=PRODUCT(C3:$H$3)

最后,第13行公式中的平均值是计算损失率后各列的简单平均值。i、 e.B13中的公式为=AVERAGE(B8:B12)

提前感谢您的帮助

^{tb1}$

Tags: 数据代码信息productexcelb2流量公式
1条回答
网友
1楼 · 发布于 2024-05-13 07:56:50

您可以使用iloc仅获取数据帧的数字部分,然后使用apply函数,在水平轴(cumprod)上按相反顺序(axis=1)使用x[::-1],从右到左计算数据上的累积乘积。这将产生损失率表中描述的预期输出。要添加最后一行(average),请计算mean并将结果序列转换为转置数据帧。然后将该数据帧连接到df_loss以获得预期结果。如果需要,可以使用原始的month名称创建新的index,并使用pd.IndexAverage添加到其中

import pandas as pd

d = {
'Month': {0: 'Feb ', 1: 'Mar ', 2: 'Apr ', 3: 'May ', 4: 'June '},
'NYD': {0: 0.4, 1: 0.74, 2: 0.67, 3: 0.57, 4: 0.5},
'DPD30': {0: 0.7, 1: 0.63, 2: 0.73, 3: 0.67, 4: 0.67},
'DPD60': {0: 0.63, 1: 0.57, 2: 0.76, 3: 0.69, 4: 0.64},
'DPD90': {0: 0.5, 1: 0.72, 2: 0.63, 3: 0.66, 4: 0.72},
'DPD120': {0: 0.9, 1: 0.8, 2: 0.83, 3: 0.64, 4: 0.72},
'DPD150': {0: 0.3, 1: 0.56, 2: 0.67, 3: 0.6, 4: 0.94},
'Loss': {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0}}

df = pd.DataFrame(d)
print(df)

df_loss = df.iloc[:, 1:].apply(lambda x: x[::-1].cumprod(), axis=1)
df_loss = df_loss[df.columns[1:]] # fix presentation order

dmean = pd.DataFrame(df_loss.mean()).T
df_loss = pd.concat([df_loss, dmean])

df_loss.index = pd.Index([*df.Month, "Average"], name="Month")

print(df_loss.round(3))

df_损耗

           NYD  DPD30  DPD60  DPD90  DPD120  DPD150  Loss
Month
Feb      0.024  0.060  0.085  0.135   0.270   0.300   1.0
Mar      0.086  0.116  0.184  0.323   0.448   0.560   1.0
Apr      0.130  0.194  0.266  0.350   0.556   0.670   1.0
May      0.067  0.117  0.175  0.253   0.384   0.600   1.0
June     0.104  0.209  0.312  0.487   0.677   0.940   1.0
Average  0.082  0.139  0.204  0.310   0.467   0.614   1.0

相关问题 更多 >