python – 将单个数据帧值与同一列中的前10个值进行比较

在数据框中,我想计算过去10天的价格中有多少比今天的价格高.结果如下所示:

price   ct>prev10
50.00   
51.00   
52.00   
50.50   
51.00   
50.00   
50.50   
53.00   
52.00   
49.00   
51.00   3

我已经看过这篇文章由DSM回答,但要求不同,因为比较的基数是静态数字而不是当前行:

Achieving “countif” with pd.rolling_sum()

当然我想在没有循环1×1的情况下这样做.非常难过 – 提前感谢任何建议.

解决方法:

您可以在该系列上使用rolling_apply函数.考虑到样本数据的小尺寸,我使用了5的窗口长度,但您可以轻松地更改它.

lambda函数计算滚动组中的项目数(不包括最后一项)大于最后一项.

df = pd.DataFrame({'price': [50, 51, 52, 50.5, 51, 50, 50.5, 53, 52, 49, 51]})

window = 5  # Given that sample data only contains 11 values.
df['price_count'] = pd.rolling_apply(df.price, window, 
                                     lambda group: sum(group[:-1] > group[-1]))
>>> df
    price  price_count
0    50.0          NaN
1    51.0          NaN
2    52.0          NaN
3    50.5          NaN
4    51.0            1
5    50.0            4
6    50.5            2
7    53.0            0
8    52.0            1
9    49.0            4
10   51.0            2

在上面的示例中,第一组是索引值为0-4的价格.你可以看到发生了什么:

group = df.price[:window].values
>>> group
array([ 50. ,  51. ,  52. ,  50.5,  51. ])

现在,将前四个价格与当前价格进行比较:

>>> group[:-1] > group[-1]
array([False, False,  True, False], dtype=bool)

然后,您只是将布尔值相加:

>>> sum(group[:-1] > group[-1])
1

这是放入索引4的第一个关闭窗口的值.

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...