gpt4 book ai didi

python - 归一化返回到 100

转载 作者:行者123 更新时间:2023-12-04 12:27:34 25 4
gpt4 key购买 nike

我有以下数据集:

import pandas as pd
data = [['2020-01-01', 'A', 0.05], ['2020-01-02', 'A', 0.06], ['2020-01-03', 'A', 0.12], ['2020-01-04', 'A', 0.09], ['2020-01-05', 'A', 0.07], ['2020-01-01', 'B', 0.10], ['2020-01-02', 'B', 0.20], ['2020-01-03', 'B', 0.15], ['2020-01-04', 'B', 0.12], ['2020-01-05', 'B', 0.18], ['2020-01-01', 'C', 0.05], ['2020-01-02', 'C', 0.11], ['2020-01-03', 'C', 0.18], ['2020-01-04', 'C', 0.09], ['2020-01-05', 'C', 0.22]]
df = pd.DataFrame(data, columns = ['DATE', 'Stock', 'Return'])
df

Out[1]:
DATE Stock Return
0 2020-01-01 A 0.05
1 2020-01-02 A 0.06
2 2020-01-03 A 0.12
3 2020-01-04 A 0.09
4 2020-01-05 A 0.07
5 2020-01-01 B 0.10
6 2020-01-02 B 0.20
7 2020-01-03 B 0.15
8 2020-01-04 B 0.12
9 2020-01-05 B 0.18
10 2020-01-01 C 0.05
11 2020-01-02 C 0.11
12 2020-01-03 C 0.18
13 2020-01-04 C 0.09
14 2020-01-05 C 0.22
我的目标是将时间序列开始时的股票 yield 归一化为100,然后根据随后几天的相应股票表现进行调整。我的目标是收到以下内容(反射(reflect)在“价格”栏中):
data2 = [['2020-01-01', 'A', 0.05, 100], ['2020-01-02', 'A', 0.06, 120], ['2020-01-03', 'A', 0.12, 240], ['2020-01-04', 'A', 0.09, 180], ['2020-01-05', 'A', 0.07, 140],   ['2020-01-01', 'B', 0.10, 100], ['2020-01-02', 'B', 0.20, 200], ['2020-01-03', 'B', 0.15, 150], ['2020-01-04', 'B', 0.12, 120], ['2020-01-05', 'B', 0.18, 180],    ['2020-01-01', 'C', 0.05, 100], ['2020-01-02', 'C', 0.11, 220], ['2020-01-03', 'C', 0.18, 360], ['2020-01-04', 'C', 0.09, 180], ['2020-01-05', 'C', 0.22, 440]]
df2 = pd.DataFrame(data2, columns = ['DATE', 'Stock', 'Return', 'Price'])
df2

Out[2]:
DATE Stock Return Price
0 2020-01-01 A 0.05 100
1 2020-01-02 A 0.06 120
2 2020-01-03 A 0.12 240
3 2020-01-04 A 0.09 180
4 2020-01-05 A 0.07 140
5 2020-01-01 B 0.10 100
6 2020-01-02 B 0.20 200
7 2020-01-03 B 0.15 150
8 2020-01-04 B 0.12 120
9 2020-01-05 B 0.18 180
10 2020-01-01 C 0.05 100
11 2020-01-02 C 0.11 220
12 2020-01-03 C 0.18 360
13 2020-01-04 C 0.09 180
14 2020-01-05 C 0.22 440
我知道一种使用命令 df = df.reset_index().pivot_table(values='Return', index='DATE', columns='Stock') 将数据格式从长到宽 reshape 的方法然后使用 df = df.pct_change().fillna(0).add(1).cumprod().mul(100).reset_index() 归一化返回,这将产生以下输出:
Out[3]:
Stock DATE A B C
0 2020-01-01 100.0 100.0 100.0
1 2020-01-02 120.0 200.0 220.0
2 2020-01-03 240.0 150.0 360.0
3 2020-01-04 180.0 120.0 180.0
4 2020-01-05 140.0 180.0 440.0
但是,在这种情况下,我希望按照最初的建议将所有股票都列在一个栏中。有没有办法添加“价格”列并相应地计算每只股票的值,即“股票”列中的每个唯一值?此任务是否需要“for”循环?
感谢您的任何建议和建议!!

最佳答案

您可以使用 groupby+transformfirst获取第一个值,然后将每行除以 *100

df['Price'] = df['Return'].div(df['Return'].groupby(df['Stock']).transform('first'))*100
print(df)

DATE Stock Return Price
0 2020-01-01 A 0.05 100.0
1 2020-01-02 A 0.06 120.0
2 2020-01-03 A 0.12 240.0
3 2020-01-04 A 0.09 180.0
4 2020-01-05 A 0.07 140.0
5 2020-01-01 B 0.10 100.0
6 2020-01-02 B 0.20 200.0
7 2020-01-03 B 0.15 150.0
8 2020-01-04 B 0.12 120.0
9 2020-01-05 B 0.18 180.0
10 2020-01-01 C 0.05 100.0
11 2020-01-02 C 0.11 220.0
12 2020-01-03 C 0.18 360.0
13 2020-01-04 C 0.09 180.0
14 2020-01-05 C 0.22 440.0

关于python - 归一化返回到 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69468775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com