根据值将一行复制到多行

问题描述

我无法找出有关股票数据的问题。我们有一个包含高、低和日期数据的 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 中的数据:

Image of data in 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'])