与熊猫一起工作-最大,最小,第一,最后

时间:2018-08-12 00:50:31

标签: python pandas candlestick-chart

我在python中有一个pandas数据框,它是分钟内的股价。我想用它来创建一个“ 3分钟”图表。为此,我需要向后跨数据框进行工作,并按如下所示进行合并。

Open是3组中的第一个“ open”值 高是3组中的最大值 Min是3个一组中的最小值 “关闭”是3组中的“关闭”值

我需要有关正确的阴囊的帮助,

  1. 创建3个集
  2. 提取我需要的值并放入新的数据框

这是我到目前为止所拥有的,但是没有用。我做错了。

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)
)

2 个答案:

答案 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.Grouperagg一起使用:

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