Python 使用Pandas将当天的第一个值指定给当天的其余行

Python 使用Pandas将当天的第一个值指定给当天的其余行,python,pandas,dataframe,Python,Pandas,Dataframe,请,我有一个熊猫数据框,包含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,我需要将该值存储在一个名为“打开A”的新列中,用于所有具有相同日期的行。 例如: 样本输入: Price A Pri

请,我有一个熊猫数据框,包含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,我需要将该值存储在一个名为“打开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['打开A'][ind]=2

只是做个测试,但这似乎要花很长时间。 我还试着阅读这里提供的内容: 但这似乎没有什么帮助。 有人有什么建议吗?
谢谢

如果需要,请将索引设置为
datetime
-

df.index = pd.to_datetime(df.index, errors='coerce')
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

这里的一个假设是,您一天的录音从9:30开始,这使我们的工作非常简单

groupby
pd.Grouper一起使用
+
转换
+
首先
-

df.index = pd.to_datetime(df.index, errors='coerce')
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

我不是百分之百肯定我会跟随。但是,您可能需要一个
df.groupby(pd.Grouper(freq='1D'))['Price a'].transform('first')
您介意将这张图片转换成一些文本,我可以复制并在终端上运行,以便为您提供答案吗?这对每个人都有帮助。你在数据框中的索引是否准确?您在那里显示的数据似乎有17年和217年之久。。。(更不用说它似乎没有实际采样(出现重复分钟))-如果这是源数据(可能在Excel中)-你真的应该在代码块中发布你的实际数据帧和可复制的样本,而不是作为图像…@cᴏʟᴅsᴘᴇᴇᴅ - 嗨,伙计们,我真诚而严肃的道歉,我想学习如何清晰地上传我的数据。为了回答你的问题,我有一个完美的采样数据,频率为分钟,9:30确实是每天的第一个值(行)。我可以问一下.transform的逻辑吗?它是如何工作的,它计算每个组的输出,然后复制每个值,使结果与原始数据帧的长度相同。非常感谢大家迄今为止提供的所有帮助。请问,有人能告诉我在哪里可以学习如何上传我这里的代码和当前熊猫数据帧吗?我为上传了一张没有用的照片感到难过。再次感谢,Andrea@Andrea我不认为这有多困难<代码>打印(df.head(10))并将输出粘贴到问题中。另外,如果答案有帮助,你能考虑接受吗?单击灰色复选框并将其切换为绿色。“你只能接受一个。”Coldspeed非常感谢你,你的答案很完美。唯一的一件事,“把输出粘贴到你的问题中。”。我试过了,但是输出乱七八糟,没有格式化。“我认为有一种不同的方法可以做到这一点。”Andrea粘贴后,突出显示数据并按ctrl+K。这在教程中都提到过。