用python计算每日股价d的相对表现

2024-04-29 18:50:19 发布

您现在位置:Python中文网/ 问答频道 /正文

数据帧“主文件”包括

##Index, Date, CompanyA, CompanyB, Company C
##0, 2019-07-26, 100, 25, 38
##1, 2019-07-25, 99, 24, 37

我有6条记录(excel中有5个工作日),公司A、B和C数据点代表每日收盘股价

我的目标是创建一个新的数据框架,其中包含从最早日期(在本例中是最后一行)开始的每日相对股价表现。因此,数据框看起来与上面的数据框“主文件”相同,只是只会显示所选日期的记录(例如2019-07-19,即6条记录),并且数据将(针对每个公司)计算为[StockPrice]/[Stock Price\u selected date]-1

因此,在上述A公司的例子中,公式(如果我从excel的角度考虑的话)

##Index, Date, Company A
##0, 2019-07-26, [StockPrice_19-7-26] / [StockPrice_19-7-19]-1
##0, 2019-07-25, [StockPrice_19-7-25] / [StockPrice_19-7-19]-1
##0, 2019-07-24, [StockPrice_19-7-24] / [StockPrice_19-7-19]-1
##0, 2019-07-23, [StockPrice_19-7-23] / [StockPrice_19-7-19]-1
##0, 2019-07-22, [StockPrice_19-7-22] / [StockPrice_19-7-19]-1
##0, 2019-07-19, [StockPrice_19-7-19] / [StockPrice_19-7-19]-1.

Tags: 文件数据dateindex记录公司代表excel
1条回答
网友
1楼 · 发布于 2024-04-29 18:50:19

我使用日期作为字符串的示例,因此它可能需要更改

df = pd.DataFrame([
    ['2019-07-26', 100, 25, 38],
    ['2019-07-25',  99, 24, 37],
    ['2019-07-24', 100, 50, 50],
    ['2019-07-19',   5,  2,  2],
], columns=['Date', 'Company A', 'Company B', 'Company C'])

print(df)

对于单个列,我可以获取值并转换为intfloat

value_A = df['Company A'][df['Date'] == '2019-07-19'] # all values
value_A = value_A.iloc[0] # only first

print('value A:', value_A)

然后我可以计算所有的行

df['Company A'] = df['Company A'] / (value_A-1)

print(df)

对于许多列,我也可以这样做

values = df[['Company A', 'Company B', 'Company C']][df['Date'] == '2019-07-19'] # all values
values = values.iloc[0] # only first

print('values:', values)

然后用同样的方法计算

df[['Company A', 'Company B', 'Company C']] = df[['Company A', 'Company B', 'Company C']] / (values - 1)

print(df)

多行的结果

         Date  Company A  Company B  Company C
0  2019-07-26      25.00       12.5       38.0
1  2019-07-25      24.75       12.0       37.0
2  2019-07-24      25.00       25.0       50.0
3  2019-07-19       1.25        1.5        2.0

编辑:同样的短一点

columns = ['Company A', 'Company B', 'Company C']

values = df[columns][df['Date'] == '2019-07-19']
values = values.iloc[0]

print('values:', values)

df[columns] = df[columns] / (values - 1)

print(df)

相关问题 更多 >