如何在同一行的变量结果中创建计算列?Pandas & Python 3

ruyhziif  于 2022-11-19  发布在  Python
关注(0)|答案(2)|浏览(120)

对于python来说,我还是一个新手,我一直在努力创建一个基于每个项的变量值的计算列。
下面的表中DF是 Dataframe 名称

我正在尝试创建一个“PE Comp”列,该列获取每个股票代码的PE值,并将其除以行业平均PE比率。
我最成功的尝试是创建一个.groupby industry Dataframe (y),它计算了每个行业的平均值。这些数字是正确的。完成后,我创建了以下代码块:

for i in DF['Industry']:

DF['PE Comp'] = DF['PE Ratio'] / y.loc[i,'PE Ratio']

然而,数字是不正确的,我已经测试过了,y.loc除数在正确的数字下工作得很好,这意味着问题来自于被除数。
有什么建议可以帮助我克服这个问题吗?
提前感谢!

vu8f3i0k

vu8f3i0k1#

您可以使用Pandas Groupby transform
以下是PE Ratio列,并将其除以分组行业的平均值(按计算速度的顺序以三种不同的方式表示):

import pandas as pd

df = pd.DataFrame({"PE Ratio": [1,2,3,4,5,6,7],
                   "Industry": list("AABCBBC")})

# option 1
df["PE Comp"] = df["PE Ratio"] / df.groupby("Industry")["PE Ratio"].transform("mean")

# option 2
df["PE Comp"] = df.groupby("Industry")["PE Ratio"].transform(lambda x: x/x.mean())

# option 3
import numpy as np
df["PE Comp"] = df.groupby("Industry")["PE Ratio"].transform(lambda x: x/np.mean(x))

df
#Out[]: 
#   PE Ratio Industry   PE Comp
#0         1        A  0.666667
#1         2        A  1.333333
#2         3        B  0.642857
#3         4        C  0.727273
#4         5        B  1.071429
#5         6        B  1.285714
#6         7        C  1.272727
8qgya5xd

8qgya5xd2#

首先,你不能迭代一个 Dataframe 。它根本没有优化,而且是对Pandas的DataFrame的误用。在我看来,创建一个包含平均值的新 Dataframe 是一个很好的方法。我认为你要写的行是:

df['PE comp'] = df['PE ratio'] / y.loc[df['Industry']].value

我只是对y.loc[df['Industry']].value有一个疑问,也许你不需要.value,也许你需要转换值,我没有测试。但精神是,你新的y DataFrame就像一个dict,包含每个行业的平均值。

相关问题