gpt4 book ai didi

python - 如何通过在 Pandas 时间序列数据框中搜索数据来添加新列

转载 作者:行者123 更新时间:2023-12-01 08:20:19 27 4
gpt4 key购买 nike

我有一个 Pandas 时间序列数据框。它包含股票 30 天的分钟数据。我想创建一个新列,说明当天早上 6 点的股票价格,例如对于 1 月 1 日的所有线路,我想要一个包含 1 月 1 日中午价格的新列,对于 1 月 2 日的所有线路,我想要一个包含 1 月 2 日中午价格的新列,依此类推。

Existing timeframe:
Date Time Last_Price Date Time 12amT
1/1/19 08:00 100 1/1/19 08:00 ?
1/1/19 08:01 101 1/1/19 08:01 ?
1/1/19 08:02 100.50 1/1/19 08:02 ?
...
31/1/19 21:00 106 31/1/19 21:00 ?

我使用了这个 hack,但它非常慢,我认为有一种更快、更简单的方法来做到这一点。

for lab, row in df.iterrows() :
t=row["Date"]
df.loc[lab,"12amT"]=df[(df['Date']==t)&(df['Time']=="12:00")]["Last_Price"].values[0]

最佳答案

实现此目的的一种方法是将 groupby 与 pd.Grouper 结合使用:

适用于 pandas 24.1+

df.groupby(pd.Grouper(freq='D'))[0]\
.transform(lambda x: x.loc[(x.index.hour == 12) &
(x.index.minute==0)].to_numpy()[0])

年长的 Pandas 使用:

 df.groupby(pd.Grouper(freq='D'))[0]\
.transform(lambda x: x.loc[(x.index.hour == 12) &
(x.index.minute==0)].values[0])

MVCE:

df = pd.DataFrame(np.arange(48*60), index=pd.date_range('02-01-2019',periods=(48*60), freq='T'))

df['12amT'] = df.groupby(pd.Grouper(freq='D'))[0].transform(lambda x: x.loc[(x.index.hour == 12)&(x.index.minute==0)].to_numpy()[0])

输出(头):

                    0  12amT
2019-02-01 00:00:00 0 720
2019-02-01 00:01:00 1 720
2019-02-01 00:02:00 2 720
2019-02-01 00:03:00 3 720
2019-02-01 00:04:00 4 720

关于python - 如何通过在 Pandas 时间序列数据框中搜索数据来添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54692429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com