根据值将一行复制到多行
Copy a row to multiple rows based on value
我无法找出有关股票数据的问题。我们有一个包含高、低和日期数据的 dataframe
。我想制作两个新列,最大值来自 24_H
和最小值来自 24_L
整个星期(从一周中的几天开始的整个星期的最小值和最大值并将其复制到该周的每个 day/row ) 问题是有些日子不见了(节假日)所以你不能对每 5 行使用一个循环。希望这是有道理的 我试着在 excel 中用图片解释它并在两周内(38 和 39)手动完成。
编辑:
代码的一部分。如何打印每周的最高值和最低值:
df.groupby(['YEAR', 'WEEK']).agg({'24_H': 'max', '24_L': 'min'})
但仍然不知道如何将一周中的每一天都打印出来
EDIT2部分数据(DoW是星期几):
DATE
DoW
24_H
24_L
WEEK
MONTH
YEAR
12.09.2005
1
1170.0
1165.0
37
9
2005
13.09.2005
2
1166.0
1157.0
37
9
2005
14.09.2005
3
1162.0
1151.0
37
9
2005
15.09.2005
4
1158.0
1150.0
37
9
2005
16.09.2005
5
1164.0
1152.0
37
9
2005
19.09.2005
1
1162.0
1153.0
38
9
2005
20.09.2005
2
1162.0
1145.0
38
9
2005
21.09.2005
3
1149.0
1134.0
38
9
2005
22.09.2005
4
1142.0
1130.0
38
9
2005
23.09.2005
5
1144.0
1134.0
38
9
2005
26.09.2005
1
1148.0
1136.0
39
9
2005
27.09.2005
2
1145.0
1135.0
39
9
2005
28.09.2005
3
1146.0
1137.0
39
9
2005
29.09.2005
4
1154.0
1136.0
39
9
2005
30.09.2005
5
1155.0
1149.0
39
9
2005
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'])
我无法找出有关股票数据的问题。我们有一个包含高、低和日期数据的 dataframe
。我想制作两个新列,最大值来自 24_H
和最小值来自 24_L
整个星期(从一周中的几天开始的整个星期的最小值和最大值并将其复制到该周的每个 day/row ) 问题是有些日子不见了(节假日)所以你不能对每 5 行使用一个循环。希望这是有道理的 我试着在 excel 中用图片解释它并在两周内(38 和 39)手动完成。
编辑: 代码的一部分。如何打印每周的最高值和最低值: df.groupby(['YEAR', 'WEEK']).agg({'24_H': 'max', '24_L': 'min'}) 但仍然不知道如何将一周中的每一天都打印出来
EDIT2部分数据(DoW是星期几):
DATE | DoW | 24_H | 24_L | WEEK | MONTH | YEAR |
---|---|---|---|---|---|---|
12.09.2005 | 1 | 1170.0 | 1165.0 | 37 | 9 | 2005 |
13.09.2005 | 2 | 1166.0 | 1157.0 | 37 | 9 | 2005 |
14.09.2005 | 3 | 1162.0 | 1151.0 | 37 | 9 | 2005 |
15.09.2005 | 4 | 1158.0 | 1150.0 | 37 | 9 | 2005 |
16.09.2005 | 5 | 1164.0 | 1152.0 | 37 | 9 | 2005 |
19.09.2005 | 1 | 1162.0 | 1153.0 | 38 | 9 | 2005 |
20.09.2005 | 2 | 1162.0 | 1145.0 | 38 | 9 | 2005 |
21.09.2005 | 3 | 1149.0 | 1134.0 | 38 | 9 | 2005 |
22.09.2005 | 4 | 1142.0 | 1130.0 | 38 | 9 | 2005 |
23.09.2005 | 5 | 1144.0 | 1134.0 | 38 | 9 | 2005 |
26.09.2005 | 1 | 1148.0 | 1136.0 | 39 | 9 | 2005 |
27.09.2005 | 2 | 1145.0 | 1135.0 | 39 | 9 | 2005 |
28.09.2005 | 3 | 1146.0 | 1137.0 | 39 | 9 | 2005 |
29.09.2005 | 4 | 1154.0 | 1136.0 | 39 | 9 | 2005 |
30.09.2005 | 5 | 1155.0 | 1149.0 | 39 | 9 | 2005 |
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'])