使用python和pandas将OHLC股票数据转换为不同的时间范围

使用python和pandas将OHLC股票数据转换为不同的时间范围,第1张

使用python和pandas将OHLC股票数据转换为不同的时间范围

您的方法是正确的,但是失败了,因为应用于agg()的函数dict中的每个函数都接收一个Series对象,该对象反映了与键值匹配的列。因此,不必再次过滤列标签。这样,并假设groupby保留顺序,您可以对Series进行切片以提取Open
/ Close列的first / last元素(注意:groupby文档并未声称保留原始数据系列的顺序,但实际上是这样)。

In [50]: df.groupby(dr5minute.asof).agg({'Low': lambda s: s.min(),         'High': lambda s: s.max(),        'Open': lambda s: s[0],        'Close': lambda s: s[-1],        'Volume': lambda s: s.sum()})Out[50]: Close    High     Low    Open  Volumekey_0          1999-01-04 10:20:00  1.1806  1.1819  1.1801  1.1801      341999-01-04 10:25:00  1.1789  1.1815  1.1776  1.1807      911999-01-04 10:30:00  1.1791  1.1792  1.1776  1.1780      16

作为参考,以下表格总结了基于groupby对象类型的聚合函数的预期输入和输出类型,以及如何将聚合函数传递到agg()。

       agg() method     agg func    agg func          agg()       input type       accepts     returnsresultGroupBy ObjectSeriesGroupBy     function         Series      value  Series       dict-of-funcs    Series      value  Dataframe, columns match dict keys       list-of-funcs    Series      value  Dataframe, columns match func namesDataframeGroupBy  function         Dataframe   Series/dict/ary   Dataframe, columns match original Dataframe       dict-of-funcs    Series      value  Dataframe, columns match dict keys, where dict keys must be columns in original Dataframe       list-of-funcs    Series      value  Dataframe, MultiIndex columns (original cols x func names)

从上表中,如果聚合需要访问多个列,则唯一的选择是将单个函数传递给DataframeGroupBy对象。因此,完成原始任务的另一种方法是定义一个类似如下的函数:

def ohlcsum(df):    df = df.sort()    return {       'Open': df['Open'][0],       'High': df['High'].max(),       'Low': df['Low'].min(),       'Close': df['Close'][-1],       'Volume': df['Volume'].sum()      }

并应用agg():

In [30]: df.groupby(dr5minute.asof).agg(ohlcsum)Out[30]:  Open    High     Low   Close  Volumekey_0          1999-01-04 10:20:00  1.1801  1.1819  1.1801  1.1806      341999-01-04 10:25:00  1.1807  1.1815  1.1776  1.1789      911999-01-04 10:30:00  1.1780  1.1792  1.1776  1.1791      16

尽管熊猫将来可能会提供一些更简洁的内置魔术,但希望这可以解释如何使用当今的agg()功能。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5644590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存