我在python中有一个pandas数据框,它是分钟内的股价。我想用它来创建一个“ 3分钟”图表。为此,我需要向后跨数据框进行工作,并按如下所示进行合并。
Open是3组中的第一个“ open”值 高是3组中的最大值 Min是3个一组中的最小值 “关闭”是3组中的“关闭”值
我需要有关正确的阴囊的帮助,
这是我到目前为止所拥有的,但是没有用。我做错了。
import pandas as pd
stock = 'SPY'
api = 'https://api.iextrading.com/1.0/stock/'+stock+'/chart/1d'
df = pd.read_json(api)
df['stock'] = stock
df1= df[['stock', 'label', 'open', 'high', 'low', 'close']]
dct = {'open': 'first', 'high': 'max', 'low': 'min',
'close': 'last', 'stock': 'first', 'label': 'last'}
(df1.set_index(pd.to_datetime(df1.label, errors='coerce'))
.groupby(pd.Grouper(freq='3min'))
.agg(dct)
.reset_index(drop=True)
)
答案 0 :(得分:2)
使用resample
:
df.set_index(pd.to_datetime(df['label'], errors='coerce'))\
.resample('3T')\
.agg({'stock': 'first',
'label': 'last',
'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last'})\
.reset_index(drop=True)[['stock','label','open','high','low','close']]
输出:
stock label open high low close
0 SPY 09:32 AM 283.44 283.580 283.32 283.580
1 SPY 09:35 AM 283.54 283.690 283.54 283.675
2 SPY 09:38 AM 283.66 283.795 283.48 283.545
答案 1 :(得分:1)
将pd.Grouper
与agg
一起使用:
dct = {'open': 'first', 'high': 'max', 'low': 'min',
'close': 'last', 'stock': 'first', 'label': 'last'}
(df.set_index(pd.to_datetime(df.label, errors='coerce'))
.groupby(pd.Grouper(freq='3min'))
.agg(dct)
.reset_index(drop=True)
)
输出:
open high low close stock label
0 283.44 283.580 283.32 283.580 SPY 09:32 AM
1 283.54 283.690 283.54 283.675 SPY 09:35 AM
2 283.66 283.795 283.48 283.545 SPY 09:38 AM