更新
我有以下数据集,我希望获得一个列表,其中包含“YES”标签之前的最后三个索引。 我的数据集:
i category
0 NO
1 NO
2 NO
3 NO
4 NO
5 YES
6 YES
7 YES
8 NO
9 NO
10 NO
11 YES
12 YES
我希望结果是:
列表=[2,3,4,8,9,10]
请注意,YES 通常出现在连续的样本范围内(2-6 个样本)。我希望获得范围内第一个 YES 之前的最后三个索引。
P.S: 数据集存储在 csv 文件中,我使用 pandas 导入
最佳答案
可能不是最pythonic的方式,但我想不出没有for循环和一些切片的方式来做到这一点,感觉像是一个hacky方法:
a = df[((df.category.ne(df.category.shift()))==True) & (df.category == 'YES')].index
indices = []
for x in a:
indices.append(df.iloc[slice(max(0, x-3), min(x, len(df)))])
new_df = pd.concat(indices) # if you wanted this as a df.
list(new_df.index)
[2, 3, 4, 8, 9, 10]
关于python - 如何提取特定类别之前的最后 3 个索引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56727354/