我正在研究如何根据特定条件选择几行(特别是-15至-5)。
我们有一个事件(日期)列表和一个带有所有BitCoin订单的大型DataFrame(按日期排序)。在此DataFrame中,如果在DataFrame中找到了Events中的值,则该列中的行将标记为“ True”。
我想做的是在此列中找到“ True”时,Python从True之前的15行(-15)到True之前的5(-5)行中选择行。总共有42个事件,我们的目标是创建一个新的DataFrame,我们将使用该框架计算这些值的描述性统计量。
答案 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]
输出: