使用pd.Grouper()获取第一个和最后一个元素

迅捷

我有一个要重新采样到5s窗口的时间序列,例如:

INDEX                   size           price
2018-05-07 21:53:13.731 0.365127    9391.800000
2018-05-07 21:53:16.201 0.666127    9391.800000
2018-05-07 21:53:18.038 0.143104    9391.800000
2018-05-07 21:53:18.243 0.025643    9391.800000
2018-05-07 21:53:18.265 0.640484    9391.800000
2018-05-07 21:53:18.906 -0.100000   9391.793421
2018-05-07 21:53:19.829 0.559516    9391.800000
2018-05-07 21:53:19.846 0.100000    9391.800000
2018-05-07 21:53:19.870 0.006560    9391.800000
2018-05-07 21:53:20.734 0.666076    9391.800000
2018-05-07 21:53:20.775 0.666076    9391.800000
2018-05-07 21:53:28.607 0.100000    9391.800000
2018-05-07 21:53:28.610 0.041991    9391.800000
2018-05-07 21:53:29.283 -0.053518   9391.793421
2018-05-07 21:53:47.322 -0.046302   9391.793421
2018-05-07 21:53:49.182 0.100000    9391.800000

def tick_features(x):
    volume = np.abs(x['size']).sum()
    num_trades = x['size'].count()
    return pd.Series([volume,num_trades], index=['volume','num_trades'])


tick = tick.groupby(pd.Grouper(freq='5S')).apply(tick_features)

如何通过pd.Grouper()获取每个5S的第一个和最后一个元素.apply()

我可以用.resample().agg()做类似的事情,{'price':'first'}但由于其他原因,我想pd.Grouper()尽可能地通过它

耶斯列尔

我建议使用DataFrameGroupBy.agg元组和函数列表first以及last

tick_features = [('volume', lambda x: x.abs().sum()),
                 ('num_trades', 'count'),
                 ('first_trade', 'first'),
                 ('last_trade', 'last')]
tick = tick.groupby(pd.Grouper(freq='5S'))['size'].agg(tick_features)
print (tick)
                       volume  num_trades   first_trade   last_trade
INDEX                                                               
2018-05-07 21:53:10  0.365127           1      0.365127     0.365127
2018-05-07 21:53:15  2.241434           8      0.666127     0.006560
2018-05-07 21:53:20  1.332152           2      0.666076     0.666076
2018-05-07 21:53:25  0.195509           3      0.100000    -0.053518
2018-05-07 21:53:30  0.000000           0           NaN          NaN
2018-05-07 21:53:35  0.000000           0           NaN          NaN
2018-05-07 21:53:40  0.000000           0           NaN          NaN
2018-05-07 21:53:45  0.146302           2     -0.046302     0.100000

apply解决方案是可能的,但需要if-else声明:

def tick_features(x):
    volume = np.abs(x['size']).sum()
    num_trades = x['size'].count()
    if not x.empty:
        f = x['size'].iloc[0]
        l = x['size'].iloc[-1]
    else:
        f = np.nan
        l = np.nan
    return pd.Series([volume,num_trades, f, l], 
                      index=['volume','num_trades', 'first_trade', 'last_trade'])


tick = tick.groupby(pd.Grouper(freq='5S')).apply(tick_features)
print (tick)
                       volume  num_trades  first_trade  last_trade
INDEX                                                             
2018-05-07 21:53:10  0.365127         1.0     0.365127    0.365127
2018-05-07 21:53:15  2.241434         8.0     0.666127    0.006560
2018-05-07 21:53:20  1.332152         2.0     0.666076    0.666076
2018-05-07 21:53:25  0.195509         3.0     0.100000   -0.053518
2018-05-07 21:53:30  0.000000         0.0          NaN         NaN
2018-05-07 21:53:35  0.000000         0.0          NaN         NaN
2018-05-07 21:53:40  0.000000         0.0          NaN         NaN
2018-05-07 21:53:45  0.146302         2.0    -0.046302    0.100000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用JavaScript或jQuery获取当月的第一个和最后一个日期

在querySelector中:如何获取第一个元素并获取最后一个元素?dom使用什么遍历顺序?

使用jQuery访问父元素的第一个/最后一个子元素中的数据属性

使用powershell分割字符串以获取第一个和最后一个元素

如何在pyspark中使用第一个和最后一个功能?

使用Python复制SAS的第一个和最后一个功能

如何使用第一个,中间和最后一个元素的中位数正确分区?

使用RLE消除第一个和最后一个序列

使用RLE从组中获取第一个和最后一个值

如何使用Oracle SQL获取多个列中的第一个非零/非空值和最后一个零/非空值

如何使用pymongo获取第一个和最后一个日期值

使用JavaScript或CSS具有“ .active”类的滑块的第一个和最后一个元素的不透明度

使用R计算每个变量的第一个和最后一个日期

如果使用PHP删除文本的第一个单词的'n',如何删除最后一个单词和最后一个字母

使用Stringr选择所有中间单词,而忽略第一个和最后一个单词

仅使用Mpchart在android中显示的第一个和最后一个标签

使用XSLT获取每月的第一个和最后一个星期日

如何使用SQL获取列中每个分区的第一个和最后一个值

GroupBy Column1,然后使用Column2上的第一个/最后一个元素获取所有元素(Python)

如何从输入短语中获取单词,然后使用C按字母顺序获取第一个单词和最后一个单词?

使用fopen PHP获取第一个和第二个元素

使用“ sed”仅替换第一个和最后一个匹配项

在Perl中使用正则表达式获取第一个和最后一个匹配的字母数字模式

如何使用`Util class`从长字符串中获取最后一个字符和第一个字符?

如何在C#中使用EF从MySQL表中获取第一个和最后一个日期?

使用递归查找列表的第一个和最后一个元素

使用 nth-of-type 在每个类上选择元素,多个 div 中的第一个和最后一个除外

仅使用 data.table 操作以数据表的形式获取每个组的第一个到最后一个元素

使用javascript获取字符串中的第一个和最后一个字符并创建子字符串