基于条件(DataFrame)创建估算窗口

时间:2019-01-06 13:03:53

标签: python pandas dataframe

我正在研究如何根据特定条件选择几行(特别是-15至-5)。

我们有一个事件(日期)列表和一个带有所有BitCoin订单的大型DataFrame(按日期排序)。在此DataFrame中,如果在DataFrame中找到了Events中的值,则该列中的行将标记为“ True”。

我想做的是在此列中找到“ True”时,Python从True之前的15行(-15)到True之前的5(-5)行中选择行。总共有42个事件,我们的目标是创建一个新的DataFrame,我们将使用该框架计算这些值的描述性统计量。

Image of Our DataFrame

1 个答案:

答案 0 :(得分:0)

这里是一个例子。仅供参考。发布一些生成测试数据集的代码时,通常更容易回答这些问题:)

首先,这是一个数据集。在这里,我们基本上试图基于True值进行选择。但是我们只想要1个之前和1个之后,所以我们不应该看到任何消失。

import pandas as pd
import numpy as np

data = [
    ['gone', False],
    ['a', False],
    ['abb', True],
    ['a', False],
    ['gone', False],
    ['gone', False],
    ['a', False],
    ['abbb', True],
    ['a', False],
    ['gone', False],
    ['gone', False]
]
df = pd.DataFrame(data=data, columns=['label', 'indicator'])

ranges = df[df['indicator']].index.values

接下来,我们将生成一系列我们感兴趣的行。对于您的情况,您需要将num_before和num_after设置为不同。您可能可以对代码进行某种程度的压缩,但是我认为这些步骤更容易理解。

num_before = 1
num_after = 1

indexes = [range(x-num_before, x+num_after+1) for x in ranges] #+1 due to the behaviour of range
x = [list(rang) for rang in indexes]
i = np.array(x).reshape(-1)

最后,我们选择与刚生成的列表匹配的行。

df.iloc[i]

输出:

enter image description here