请问,我有一个包含2只股票的日内数据的熊猫数据框。该指数是按分钟抽样的时间序列(即1/1/2017 9:30,1 / 1/2017 9:31,1 / 1/1 9:32,......)。只有两列“价格A”,“价格B”。行总数= 52000.我需要创建一个新列,每天存储9.30 am值。假设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?但它似乎没有帮助。有人有建议吗?谢谢
如果需要,将索引设置为datetime
-
df.index = pd.to_datetime(df.index, errors='coerce')
df
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
这里的一个假设是你的一天的录音从9:30
开始,使我们的工作变得非常简单。
使用groupby
与pd.Grouper
+ transform
+ first
-
df['Open A'] = df.groupby(pd.Grouper(freq='1D'))['Price A'].transform('first')
df
Price A Price B Open A
date
2017-01-01 09:30:00 150 1 150
2017-01-01 09:31:00 153 2 150
2017-01-01 09:31:00 149 3 150
2017-01-01 09:31:00 151 4 150
2017-02-01 09:30:00 145 1 145
2017-02-01 09:31:00 139 2 145
2017-02-01 09:31:00 142 3 145
2017-02-01 09:31:00 149 4 145