Python 迭代整个列并将结果存储到列表中

Python 迭代整个列并将结果存储到列表中,python,pandas,numpy,Python,Pandas,Numpy,我想知道如何迭代一个数据帧的每一列来执行一些计算,并将结果存储在另一个数据帧中 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

我想知道如何迭代一个数据帧的每一列来执行一些计算,并将结果存储在另一个数据帧中

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”(市场每日收益率,它是我的参考列/我的数据框架的最后一列)之间的协方差矩阵。然后我想计算每个协方差对股票/市场的贝塔值

我不知道为什么return(beta)会给出一只股票的单个数值结果,而print(beta)会打印所有股票的beta。 我想找到一种方法,用所有这些beta创建一个数据帧

beta_df = df_empty.append(beta)
我已经尝试了上面的代码,但是它返回'none',就好像它不能追加结果一样。
感谢您的帮助

for循环中的
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

for循环中的
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

欢迎来到堆栈溢出!一个例子使我们更容易帮助您。
return
确实打破了循环,为什么要这样使用它?欢迎使用堆栈溢出!举个例子,我们可以更容易地帮助您。
return
会打破循环,您为什么这样使用它?