【发布时间】:2021-09-07 19:30:23
【问题描述】:
我有一个财务收盘价(每周)数据,如下所示:
Date V1 V2 V3 V4 V5 V6 V7
2010-01-01 77.31 66.94 52.33 34.94 81.38 84.75 482
2010-01-08 78.05 68.85 52.84 34.66 90.15 95.61 508
2010-01-15 79.29 68.3 53.61 35.33 86.97 97.87 490
2010-01-22 80.57 68.19 55.43 35.8 86.04 99.26 480
2010-01-29 81.87 68.79 55.84 35.6 83.36 98.53 462
2010-02-05 83.7 70.35 57.3 36.57 84.54 91.83 464
2010-02-12 81.85 68.32 56.4 37.35 81.2 90.75 455
2010-02-19 82.66 69.04 56.21 36.89 81.85 93.98 457
2010-02-26 86.32 69.7 57.43 37.12 83.96 96.43 467
2010-03-05 85.37 69.98 57.34 36.71 84.01 94.83 466
2010-03-12 84.04 69.76 56.74 36.98 83.02 93.92 466
2010-03-19 84.37 69.76 56.77 37.07 83.29 95.04 458
2010-03-26 85.7 70.06 56.62 36.81 81.64 94.84 459
2010-04-02 85.38 70.72 56.03 36.78 83.91 94.98 464
2010-04-09 89.21 71.7 58.38 37.49 86.95 98.74 471
2010-04-16 89.74 72.35 58.74 38.05 85.58 98.28 487
2010-04-23 90.72 74.26 60.61 38.64 90.5 100.18 492
2010-04-30 99.79 78.67 65.14 38.89 95.82 108.87 494
2010-05-07 102.34 81.48 63.45 41.87 93.18 106.2 478
2010-05-14 96.42 79.81 62.57 41.23 88.94 102.23 484
2010-05-21 96.17 76.9 61.06 39.28 88.22 97.8 444
2010-05-28 95.73 77.67 61.1 39.88 92.88 96.84 421
这里V1,V2...V7是一些公司,在上表数据中给出了每周收盘价。
我要做的是计算:
- 每个月的开盘价、收盘价、最高价和最低价
- open 应该是该月 Date 列中第一个日期的价格,而 close 应该是最后一个日期,对吧?
我正在使用下面的代码,它会返回如下代码所示的结果:
def calculate(x):
open = x.loc[x.index.min(), "V1"]
high = x.loc[x.index, "V1"].max()
low = x.loc[x.index, "V1"].min()
close = x.loc[x.index.max(), "V1"]
return open, high, low, close
result = pd.DataFrame()
result = df.groupby(df["Date"].dt.to_period("M")).apply(calculate)
result
以上结果:
Date
2010-01 (77.31, 81.87, 77.31, 81.87)
2010-02 (83.7, 86.32, 81.85, 86.32)
2010-03 (85.37, 85.7, 84.04, 85.7)
2010-04 (85.38, 99.79, 85.38, 99.79)
2010-05 (102.34, 102.34, 95.73, 95.73)
...
现在我想将这些元组连同日期一起放入相应的列中:
- 日期、开盘价、最高价、最低价、收盘价
还有, 2. 我想使用单循环操作或其他方式对所有变量(V1 到 V7)重复上述函数。
有人可以建议我如何做到这一点吗?
【问题讨论】:
标签: python python-3.x pandas