Python 如何根据滚动基础上的得分从投资组合中选择股票?

Python 如何根据滚动基础上的得分从投资组合中选择股票?,python,rebalancing,Python,Rebalancing,我正在做一个家庭作业,在这个作业中,我应该根据一定的约束条件构建一个股票投资组合。基于这些约束条件,我将在投资组合中选择我的股票,并每月根据这些分数对我的投资组合进行重新平衡。所以我有两个数据框——一个是股票回报,另一个是我将在投资组合中计算股票的分数。此外,数据框形状为12x360,即日期为指数,列标题为股票。我有一个360只股票的世界,必须根据分数选择前30只和后30只 由于我是python新手,我很难想象如何根据另一个数据帧中的值从一个数据帧中挑选股票。 其次,是否可以在一行中选择前30名

我正在做一个家庭作业,在这个作业中,我应该根据一定的约束条件构建一个股票投资组合。基于这些约束条件,我将在投资组合中选择我的股票,并每月根据这些分数对我的投资组合进行重新平衡。所以我有两个数据框——一个是股票回报,另一个是我将在投资组合中计算股票的分数。此外,数据框形状为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])

如果我理解正确,您有两个数据框:一个是股票(更具体地说是股票?),另一个是分数。要选择30个最高/最低的do(通过名为scores的列):

我不确定你是如何将分数与股票联系起来的(我猜你仅仅通过查看数字就不知道哪个是哪个),但一个选择是将两个数据框合并在一起,以便更容易对它们进行操作。因此,如果您有这样一个数据帧:

ticker          score 
AAPL              10
XOM               20
PINS              30
然后,很容易对分数数据框进行映射: (假设您的第一个数据帧称为df_tickers,第二个数据帧称为df_scores,两个数据帧都有一个称为“tickers”的公共列)


谢谢你的回复。两个数据帧都有股票代码。一个数据框是带有股票收益的股票代码,另一个是带有分数的股票代码。现在对我来说有点棘手的是票证是列头而不是行。所以我必须迭代每一行(因为一行是一个数据点)。我知道股票代码可以用于从其他DataFrame中选择股票您不能将它们转为股票代码行吗?这将使你的直观性提高10倍我同意这将更加直观,但由于我的分析是一个时间序列,我希望时间数据点是行,股票代码是列标题
ticker          score 
AAPL              10
XOM               20
PINS              30
df_scores = df[['ticker','scores']] 
df_scores = df_scores.set_index('ticker').to_dict()['scores']
df_tickers['scores'] = df_tickers['ticker'].replace(df_scores )