python - 如何将列表乘以数据框的每一行?
问题描述
所以我有一个看起来像这样的数据框:
AMZN FB GOOG NFLX
Date
2017-06-30 NaN NaN NaN NaN
2017-07-03 0.985186 0.983110 0.988963 0.978315
2017-07-05 1.018602 1.012868 1.014476 1.009852
2017-07-06 0.993556 0.989890 0.994494 0.990787
2017-07-07 1.014112 1.017605 1.013125 1.026872
2017-07-10 1.018094 1.013603 1.011115 1.016580
2017-07-11 0.997652 1.011531 1.001389 1.010873
2017-07-12 1.012453 1.023379 1.014773 1.028640
2017-07-13 0.994158 1.002266 1.003528 0.996598
2017-07-14 1.001179 1.004458 1.009323 1.018393
2017-07-17 1.008215 0.998500 0.997312 1.003600
2017-07-18 1.014267 1.019596 1.012565 1.135436
2017-07-19 1.002362 1.007859 1.005687 1.001416
2017-07-20 1.001782 1.002376 0.997178 0.998586
2017-07-21 0.997055 0.999392 1.004927 1.026906
2017-07-24 1.012948 1.009548 1.007627 0.996659
2017-07-25 1.000886 0.995663 0.969766 0.994998
2017-07-26 1.012434 1.001997 0.996950 1.011285
2017-07-27 0.993541 1.029165 0.985535 0.966152
2017-07-28 0.975182 1.011793 1.007965 1.007445
2017-07-31 0.968374 0.981444 0.988285 0.987068
这些数字是其股票代码的 pct_change。我也有一个看起来像这样的起始市场价值的字典:
port2_mkt_val = {'FB':25,
'AMZN':25,
'NFLX':25,
'GOOG':25}
本质上,我要做的是将字典中每只股票各自的市场价值与每一天相乘。我不能做直接乘法,因为我不希望 dict 成为数据框的标量,我正在寻找的是获取起始市场价值并将 2017 年 7 月 3 日的回报相乘,然后取它(添加它到一个新的数据框)然后将其乘以 2017 年 7 月 5 日的回报,依此类推。我计划遍历 df 的每一行,但我听说这是不好的做法。有什么更好的方法来做到这一点?
解决方案
尝试:
df = df.fillna(1)
for c in df.columns:
df[c] = df[c].cumprod() * port2_mkt_val[c]
print(df)
印刷:
AMZN FB GOOG NFLX
Date
2017-06-30 25.000000 25.000000 25.000000 25.000000
2017-07-03 24.629650 24.577750 24.724075 24.457875
2017-07-05 25.087811 24.894016 25.081981 24.698834
2017-07-06 24.926145 24.642338 24.943879 24.471284
2017-07-07 25.277903 25.076166 25.271268 25.128876
2017-07-10 25.735281 25.417277 25.552158 25.545513
2017-07-11 25.674855 25.710364 25.587650 25.823269
2017-07-12 25.994584 26.311447 25.965656 26.562848
2017-07-13 25.842723 26.371068 26.057263 26.472481
2017-07-14 25.873192 26.488631 26.300195 26.959389
2017-07-17 26.085740 26.448898 26.229500 27.056443
2017-07-18 26.457905 26.967190 26.559074 30.720859
2017-07-19 26.520399 27.179125 26.710115 30.764360
2017-07-20 26.567658 27.243703 26.634739 30.720859
2017-07-21 26.489416 27.227139 26.765968 31.547435
2017-07-24 26.832401 27.487104 26.970113 31.442035
2017-07-25 26.856175 27.367892 26.154698 31.284762
2017-07-26 27.190105 27.422546 26.074926 31.637810
2017-07-27 27.014484 28.222324 25.697753 30.566934
2017-07-28 26.344038 28.555150 25.902435 30.794504
2017-07-31 25.510882 28.025281 25.598988 30.396270
推荐阅读
- vba - 为什么 Outlook vb 不起作用 - 限定符无效
- python - 用于异步计算/获取的 Python Asyncio/Trio
- logging - 使用 MuleSoft Runtime 4.4 进行 MDC 日志记录
- java - 如何获取 mapA 中的键,因为 mapB 中的键是 mapA 中键的子字符串?
- c++ - 如何通过拆分数据计算大文件中的单词?
- python - Vlookup 功能/合并 Pandas 但不完全匹配
- python - 将列添加到熊猫中的特定级别数据透视表
- spring-boot - com.fasterxml.jackson.databind.JsonMappingException:java.util.Optional 不能转换为 java.time.LocalDate
- java - 为对象引用声明类字段,而不是使用本地函数
- fortran - 我的表达式中缺少实数错误中的指数