我正在处理一个家庭作业问题,我应该根据某些限制构建股票投资组合。基于这些限制,我将在投资组合中选择我的股票,并每月根据这些分数对我的投资组合进行重新平衡。所以我有两个数据框——一个是股票收益,另一个是我将在投资组合中挑选股票的分数。此外,数据框的形状是 12x360,即日期是索引,列标题是股票。我有一个 360 个股票世界,必须根据分数选择前 30 名和后 30 名。
由于我是 python 新手,我很难想象如何根据另一个数据框中的值从一个数据框中挑选股票。其次,是否可以在一行中选择前 30 和后 30 的分数,因为我的日期是数据框的索引。
下面是我为清理和计算收益而准备的初始代码。如果有人可以指导我下一步,我将非常感激。
import pandas as pd
import numpy as np
def log_return(price):
return np.log(price) - np.log(price.shift(1))
dataframe = pd.read_excel(r'M:\Overlay\09_Projects\Madhav\Trial.xlsx')
df1 = dataframe.iloc[:,0:14]
df1 = df1.transpose()
df1.columns = df1.iloc[0]
df1 = df1.drop(df1.index[[0,1]])
for cols in df1:
df1[cols] = pd.to_numeric(df1[cols])
df1_ret = log_return(df1)
df2 = dataframe
df2.drop(df2.iloc[:, 1:14], axis = 1, inplace=True)
df2 = df2.transpose()
df2.columns = df2.iloc[0]
df2 = df2.drop(df2.index[0])
for cols in df2:
df2[cols] = pd.to_numeric(df2[cols])