使用Pandas将当天的第一个值分配给当天的其余行

问题描述 投票:0回答:1

请问,我有一个包含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”的新列中,该列对于当天的每一行。例如:enter image description here

样本输入:

                     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?但它似乎没有帮助。有人有建议吗?谢谢

python pandas dataframe
1个回答
1
投票

如果需要,将索引设置为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开始,使我们的工作变得非常简单。

使用groupbypd.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
© www.soinside.com 2019 - 2024. All rights reserved.