Python 如何将一列乘以一个较短的“列表”;重量;,然后对输出执行计算并存储值
我有一个这样的设置-但数字不同:Python 如何将一列乘以一个较短的“列表”;重量;,然后对输出执行计算并存储值,python,pandas,loops,iteration,Python,Pandas,Loops,Iteration,我有一个这样的设置-但数字不同: df1 = {'Date': ['2020-01-06', '2020-01-07', '2020-01-08','2020-01-09', '2020-01-10', '2020-01-13','2020-01-14','2020-01-15','2020-01-16', '2020-01-17', '2020-01-20'], 'Return': '0.02', '0.004','0.006', '0.001','0.005', '0.01
df1 = {'Date': ['2020-01-06', '2020-01-07', '2020-01-08','2020-01-09', '2020-01-10', '2020-01-13','2020-01-14','2020-01-15','2020-01-16', '2020-01-17', '2020-01-20'],
'Return': '0.02', '0.004','0.006', '0.001','0.005', '0.01','0.015', '0.001','0.0014',
'0.04', '0.037'}
权重=[1,2,3]
我需要做的是将最后3个返回值乘以权重列,求和,然后求出答案-。然后根据2020-01-20储存这些数据。然后,我需要将最后3个返回值(除最后一行(移动1行)乘以权重、总和、sqrt和存储答案与2020-01-17等等。
因此,我的输出列的前两行将为空,然后从2020-01-08开始填充9个条目
所以我需要进行计算,移动列1行,然后重复,但是保存求和的sqrt每次都会返回
我可以使用以下公式正确计算一次(仅适用于最后3行):
df_last_3 = df.iloc[-3:].reset_index()
df_last_3['return*weights'] = df_last_3 * weights
sqrt_return= (np.sqrt((df_last_3['return*weights']).sum()))
但是我需要对移位的列行执行相同的计算——并存储结果
我是Python新手,没有足够的循环练习来真正理解它。我试过了,但没有得到我想要的结果
我到处都找过这样的例子,但仍然找不到解决方案。任何帮助都将不胜感激。使用,窗口大小为3
,然后使用。应用根据要求处理滚动窗口:
df1['Result'] = df1['Return'].rolling(3).apply(
lambda s: np.sqrt((s * weights[::-1]).sum()))
谢谢你的解决方案!我看到FutureWarning:当前,“apply”将值作为ndarray传递给应用的函数。将来,这将更改为将其作为系列对象传递。您需要指定'raw=True'以保持当前行为,并且可以传递'raw=False'以在我在代码中运行时消除此警告。这是我需要担心的事情吗?没什么好担心的,只需在apply方法中传递参数raw=False
,以抑制此消息。
# print(df1)
Date Return Result
0 2020-01-06 0.02 NaN
1 2020-01-07 0.004 NaN
2 2020-01-08 0.006 0.272029
3 2020-01-09 0.001 0.158114
4 2020-01-10 0.005 0.158114
5 2020-01-13 0.01 0.151658
6 2020-01-14 0.015 0.223607
7 2020-01-15 0.001 0.246982
8 2020-01-16 0.0014 0.220000
9 2020-01-17 0.04 0.214009
10 2020-01-20 0.037 0.348138
# Calculations:
# 0.348138 = sqrt(1 * 0.037 + 2 * 0.04 + 3 * 0.0014)
# 0.214009 = sqrt(1 * 0.04 + 2 * 0.0014 + 3 * 0.001)
# ...