【发布时间】:2018-06-09 23:59:26
【问题描述】:
请,我有一个熊猫数据框,其中包含 2 只股票的盘中数据。 该指数是按分钟采样的时间序列(即 2017 年 1 月 1 日 9:30、2017 年 1 月 1 日 9:31、2017 年 1 月 1 日 9:32,...)。 只有两列“价格 A”、“价格 B”。 总行数 = 52000。 我需要创建一个新列,在其中存储每天上午 9.30 的值。 假设 2017 年 1 月 1 日,上午 9:30 的“价格 A”为 150,我需要将此值存储在一个名为“Open A”的新列中,用于同一天的每一行。 例如:
示例输入:
Price A Price B
date
2017-01-01 09:30:00 150 1
2017-01-01 09:31:00 153 2
2017-01-01 09:31:00 149 3
2017-01-01 09:31:00 151 4
2017-02-01 09:30:00 145 1
2017-02-01 09:31:00 139 2
2017-02-01 09:31:00 142 3
2017-02-01 09:31:00 149 4
我尝试简单地使用:
对于 df.index 中的 ind: df['Open A'][ind] = 2
只是为了进行测试,但这似乎需要很长时间。 我还尝试阅读此处可用的内容: How to iterate over rows in a DataFrame in Pandas? 但这似乎没有帮助。 有人有建议吗? 谢谢
【问题讨论】:
-
我不是 100% 肯定我会跟随。但是,您可能需要
df.groupby(pd.Grouper(freq='1D'))['Price A'].transform('first') -
你介意把这张图片转换成一些我可以复制并在终端中运行的文本来为你提供答案吗?这将对每个人都有帮助。
-
你在DataFrame中的索引真的准确吗?您在那里显示的数据似乎有多年的
17和217...(更不用说它似乎实际上没有被采样(重复分钟发生)) - 如果那是源数据(可能在 Excel 中) - 你真的应该在代码块中发布你的实际 DataFrame 和可重现的示例,而不是作为图像...... -
@cᴏʟᴅsᴘᴇᴇᴅ - 大家好,我真诚而认真地道歉,我打算学习如何清楚地上传我的数据。为了回答您的问题,我确实有一个完美的采样数据,其频率为分钟级别,并且 9:30 确实是每天的第一个值(行)。请问.transform的逻辑?
-
它的工作原理是,它计算每个组的输出,然后复制每个值,使结果与原始数据帧的长度相同。