我正在尝试开发一种更有效的方法来返回某些预定索引行之前和之后的值。我目前正在手动执行此操作。
重要索引标记如下([500, 2000, 2500, 4200, 7567]
)。这些只是一些例子。它们可以是任何索引号。我希望自动化代码,以便每个索引值返回250 rows
加上和减去这个数字。由于第一个预期的索引号是500,我想在500的任一侧返回250行。所以250:500
和500:750
。在为每个预期索引执行此操作后,我concatenate
将它们放在一起。下面的示例显示了前两个预期索引的过程。
目前,我通过.iloc
手动返回相应的行。如果我没有很多想要返回的索引,这很好。但是如果有100个索引需要执行此功能,那就变得非常麻烦。
df = pd.DataFrame(np.random.randn(10000, 4), columns=list('ABCD'))
important_indexes = [500, 2000, 2500, 4200, 7567]
df1 = df.iloc[250:500]
df2 = df.iloc[500:750]
df3 = pd.concat([df1, df2])
df4 = df.iloc[1750:2000]
df5 = df.iloc[2000:2250]
df6 = pd.concat([df4, df5])
df7 = pd.concat([df3,df6])
答案 0 :(得分:0)
您可以在列表理解中创建索引:
idx = [500, 2000, 2500, 4200, 7567]
N = 3
fin = [i for x in idx for i in range(x-N, x + N + 1) if i in range(len(df))]
print (fin)
[497, 498, 499, 500, 501, 502, 503, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2497, 2498, 2499, 2500, 2501, 2502, 2503, 4197, 4198, 4199, 4200, 4201, 4202,
4203, 7564, 7565, 7566, 7567, 7568, 7569, 7570]
df = df.loc[np.unique(fin)]
print (df.head(10))
A B C D
497 -0.427715 -0.594448 -0.601282 0.470405
498 -1.822557 0.174358 1.278744 0.600856
499 0.288681 -0.843391 1.085665 -0.688055
500 0.105091 1.205726 -1.983058 0.167988
501 0.672003 -1.203700 0.499095 1.158318
502 0.536697 -0.383856 0.873004 -1.290925
503 1.554669 -0.782812 0.900755 -0.328286
1997 -0.187344 -1.100535 -1.791559 -0.588603
1998 -1.525571 -0.316076 1.276415 -0.297315
1999 0.498313 -0.094936 -0.598474 0.045281