问题描述
我无法找出有关股票数据的问题。我们有一个包含高、低和日期数据的 dataframe
。我想制作两个新列,最大值来自 24_H
,最小值来自 24_L
的整个星期(从一周中的几天开始的整个星期的最小值和最大值,并将其复制到该周的每一天/行)问题缺少某些日子(假期),因此您不能每 5 行使用一个循环。希望有意义我尝试在 excel 中的图片中解释它并在两周(38 和 39)内手动完成。
编辑: 代码的一部分。如何打印每周的高低值: df.groupby(['YEAR','WEEK']).agg({'24_H': 'max','24_L': 'min'}) 但仍然不知道如何将它们打印回一周中的每一天
EDIT2 部分数据(DoW 是星期几):
日期 | DoW | 24_H | 24_L | 周 | MONTH | 年 |
---|---|---|---|---|---|---|
12.09.2005@H_502_33@ | 1@H_502_33@ | 1170.0@H_502_33@ | 1165.0@H_502_33@ | 37@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
13.09.2005@H_502_33@ | 2@H_502_33@ | 1166.0@H_502_33@ | 1157.0@H_502_33@ | 37@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
14.09.2005@H_502_33@ | 3@H_502_33@ | 1162.0@H_502_33@ | 1151.0@H_502_33@ | 37@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
15.09.2005@H_502_33@ | 4@H_502_33@ | 1158.0@H_502_33@ | 1150.0@H_502_33@ | 37@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
16.09.2005@H_502_33@ | 5@H_502_33@ | 1164.0@H_502_33@ | 1152.0@H_502_33@ | 37@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
19.09.2005@H_502_33@ | 1@H_502_33@ | 1162.0@H_502_33@ | 1153.0@H_502_33@ | 38@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
20.09.2005@H_502_33@ | 2@H_502_33@ | 1162.0@H_502_33@ | 1145.0@H_502_33@ | 38@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
21.09.2005@H_502_33@ | 3@H_502_33@ | 1149.0@H_502_33@ | 1134.0@H_502_33@ | 38@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
22.09.2005@H_502_33@ | 4@H_502_33@ | 1142.0@H_502_33@ | 1130.0@H_502_33@ | 38@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
23.09.2005@H_502_33@ | 5@H_502_33@ | 1144.0@H_502_33@ | 1134.0@H_502_33@ | 38@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
26.09.2005@H_502_33@ | 1@H_502_33@ | 1148.0@H_502_33@ | 1136.0@H_502_33@ | 39@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
27.09.2005@H_502_33@ | 2@H_502_33@ | 1145.0@H_502_33@ | 1135.0@H_502_33@ | 39@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
28.09.2005@H_502_33@ | 3@H_502_33@ | 1146.0@H_502_33@ | 1137.0@H_502_33@ | 39@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
29.09.2005@H_502_33@ | 4@H_502_33@ | 1154.0@H_502_33@ | 1136.0@H_502_33@ | 39@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
30.09.2005@H_502_33@ | 5@H_502_33@ | 1155.0@H_502_33@ | 1149.0@H_502_33@ | 39@H_502_33@ | 9@H_502_33@ | 2005@H_502_33@ |
excel 中的数据:
解决方法
按照您的描述使用 groupby(),然后进行内部联接 (pandas.merge()) 以将新的(分组的)DF 的数据复制回主数据。还可以使用 reset_index() 来创建 YEAR 和 WEEK 列而不是weekly_limits 中的索引:
weekly_limits = df.groupby(['YEAR','WEEK']).agg(
{'24_H': 'max','24_L': 'min'}
).reset_index()
df_with_weekly_limits = pandas.merge(df,weekly_limits,on=['YEAR','WEEK'])