Python: 有没有办法在列表中指定的数据框的所有列上单独应用一个函数? Pyfinance 包

Python: Is there a way to apply a function separately on all columns of a dataframe specified in a list? Pyfinance package

如果有人能给我一个好的答案,我将不胜感激,因为我目前没有前进。没有任何资源帮助我和我尝试创建循环失败。

我有一个很大的股票数据框 returns,我试图在下面创建它的测试数据集。用来推导股票(相对于市场)returns 滚动贝塔的函数运行良好。但是,我无法创建一个函数来分别将其应用于 all/selected 列。

我会对两种解决方案感兴趣:

i) 这有助于我 apply/loop 数据帧的每一列的 ols.PandasRollingOLS 函数分别

ii) 和另一个仅 运行 ols.PandasRollingOLS 函数分别作用于列表

中指定的列
import pandas as pd

# intialise data 
data = {'Market':[0.03, -0.01, 0.01, -0.01],
        'Stock1':[0.01, -0.02, 0.03, -0.02],
        'Stock2':[0.01, -0.011, 0.01, -0.011],
        'Stock3':[0.01, -0.011, 0.01, -0.011], 
        'Stock4':[0.02, -0.1, 0.02, 0.09],
        'Stock5':[-0.01, 0.01, 0.01, 0.005]}

list_stocks = ["Stock1", "Stocks2", "Stock3"]

# Create DataFrame
df = pd.DataFrame(data)


以下代码产生了正确的结果,但考虑到数据框的大小,我无法对数据集使用此解决方案:


#!pip3 install pyfinance
from pyfinance import ols

y=df["Market"]
w = 2 
roll_beta["Stock1"] = ols.PandasRollingOLS(y=y, x=df[["Stock1"]], window=w).beta["Stock1"]
roll_beta["Stock2"] = ols.PandasRollingOLS(y=y, x=df[["Stock2"]], window=w).beta["Stock2"]
roll_beta["Stock3"] = ols.PandasRollingOLS(y=y, x=df[["Stock3"]], window=w).beta["Stock3"]


print(roll_beta)
$     Stock1    Stock2    Stock3
1  1.333333  1.904762  1.904762
2  0.400000  0.952381  0.952381
3  0.400000  0.952381  0.952381

您说您尝试了一个循环,但没有说明问题所在。这是一个基于您的示例的简单循环 - 这对您有用吗?

from pyfinance import ols

y=df["Market"]
w = 2
roll_beta = DataFrame()

for col in df.columns[1:]: 
    roll_beta[col] = ols.PandasRollingOLS(y=y, x=df[[col]], window=w).beta[col]


print(roll_beta)