大熊猫0.22,重新采样只有完整的箱子,丢弃部分

时间:2018-05-10 12:10:02

标签: python python-3.x pandas dataframe

我正在尝试将1小时的交易数据重新采样到4小时的箱子中。 问题是我的pandas代码还提供了尚未关闭的部分箱的输出。

我的输入:

                  close    high     low    open  symbol       turnover  \
timestamp
2018-05-08 03:00:00  9418.0  9449.0  9408.5  9412.5  XBTUSD  1091577940325
2018-05-08 04:00:00  9423.5  9435.0  9390.0  9418.0  XBTUSD   801492831858
2018-05-08 05:00:00  9414.0  9428.5  9393.5  9423.5  XBTUSD   445420257388
2018-05-08 06:00:00  9337.0  9414.0  9314.5  9414.0  XBTUSD  1349710247828
2018-05-08 07:00:00  9328.5  9359.5  9305.0  9337.0  XBTUSD  1103092129997
2018-05-08 08:00:00  9355.0  9359.5  9328.5  9328.5  XBTUSD   647813850343
2018-05-08 09:00:00  9376.0  9383.0  9355.0  9355.0  XBTUSD   597066647876
2018-05-08 10:00:00  9312.0  9376.5  9241.5  9376.0  XBTUSD  1933554301163
2018-05-08 11:00:00  9296.0  9338.0  9275.5  9312.0  XBTUSD  1318169059747
2018-05-08 12:00:00  9201.5  9305.0  9178.0  9296.0  XBTUSD  2058057970783

我的输出:

                   open    high     low   close     volume         vwap  \
timestamp
2018-05-08 04:00:00  9418.0  9435.0  9305.0  9328.5  346736372  9380.972675
2018-05-08 08:00:00  9328.5  9383.0  9241.5  9296.0  419074812  9332.798550
2018-05-08 12:00:00  9296.0  9305.0  9178.0  9201.5  189922434  9228.497600

请注意,从12:00到16:00的4小时间隔包含来自源的12:00小时间隔的部分数据。

我想要的输出应该如下:

                     open    high     low   close     volume         vwap  \
timestamp
2018-05-08 04:00:00  9418.0  9435.0  9305.0  9328.5  346736372  9380.972675
2018-05-08 08:00:00  9328.5  9383.0  9241.5  9296.0  419074812  9332.798550

因此,必须关闭整个12:00间隔才能在重采样过程中提供数据。

我的代码到目前为止:

outputData = srcData.resample('4H').agg({'open': 'first',
                                                'high': 'max',
                                                'low': 'min',
                                                'close': 'last',
                                                'volume': 'sum',
                                                'vwap': 'mean',
                                                'turnover': 'sum',
                                                'symbol': 'first'})

pandas中是否有一个功能可以帮助我或者我必须找到一种方法来重新采样后切掉部分间隔? 干杯 亚历

1 个答案:

答案 0 :(得分:1)

您可以在agg方法中添加一个计数,然后使用该计数列过滤生成的数据框,以仅显示“完整的bin”。

df_out = df.resample('4H').agg({'open': 'first',
                                 'high': 'max',
                                                 'low': 'min',
                                                 'close': 'last',
                                                 'turnover': 'sum',
                                                 'symbol': ['first','count']})
df_out.columns = df_out.columns.map('_'.join)

df_out.query('symbol_count == 4')

输出:

                     open_first  high_max  low_min  close_last   turnover_sum symbol_first  symbol_count
timestamp                                                                                               
2018-05-08 04:00:00      9418.0    9435.0   9305.0      9328.5  3699715467071       XBTUSD             4
2018-05-08 08:00:00      9328.5    9383.0   9241.5      9296.0  4496603859129       XBTUSD             4