我想知道如何遍历数据帧的每一列以执行某些计算并将结果存储在另一个数据帧中。
df_empty = []
m = daily.ix[:,-1] #Columns= stocks & Rows= daily returns
stocks = daily.ix[:,:-1]
for col in range (len(stocks.columns)):
s = daily.ix[:,col]
covmat = np.cov(s,m)
beta = covmat[0,1]/covmat[1,1]
return (beta)
print(beta)
在上面的例子中,我首先要计算" s"之间的协方差矩阵。 (代表股票每日回报的列,我想逐一迭代)和" m" (市场每日回报,这是我的参考栏/我数据帧的最后一栏)。然后我想计算每个协方差对股票/市场的beta。
我不确定为什么返回(测试版)给我一个股票的单个数字结果,而print(beta)打印所有股票的beta。 我想找到一种方法来创建一个包含所有这些测试版的数据框。
beta_df = df_empty.append(beta)
我已经尝试过上面的代码,但它返回“没有”#39;好像它无法追加结果。 谢谢你的帮助
答案 0 :(得分:0)
for-loop中的return
语句在第一次遇到返回时结束循环。此外,您没有在任何地方保存beta
值,因为for循环本身不会在python中返回值(它只有副作用)。
除此之外,您可以在数据框上使用apply
选择更像熊猫的方法,该方法基本上遍历数据框的列,并在返回时将每列作为第一个参数传递给提供的函数函数调用的结果。这是一个带有一些虚拟数据的最小工作示例:
import pandas as pd
import numpy as pd
# create some dummy data
daily = pd.DataFrame(np.random.randint(100, size=(100, 5)))
# define reference column
cov_column = daily.iloc[:, -1]
# setup computation function
def compute(column):
covmat = np.cov(column, cov_column)
return covmat[0,1]/covmat[1,1]
# use apply to iterate over columns
result = daily.iloc[:, :-1].apply(compute)
# show output
print(result)
0 -0.125382
1 0.024777
2 0.011324
3 -0.017622
dtype: float64