python - 如何提取特定类别之前的最后 3 个索引号

标签 python pandas list indexing categories

更新

我有以下数据集,我希望获得一个列表,其中包含“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/

相关文章:

python - 获取命令在 Popen 中的位置

python - 如何验证 MAC 地址的格式?

python - Django:删除管理员用户更改表单中的 "view on site"按钮

python - Multiindex 仅对 Pandas 中的某些列进行多索引

C语言中构造指针链表

java - 基于其中元素数量的 java.util.List 的异常行为

python - PyQt5 - 在 QTableWidget 后面更新 DataFrame

python - 如何从 pandas 列中提取特定文本

python - 从其他列派生 DataFrame 列,无需编写任何循环

java - 根据java中的字母将按字母顺序排序的列表拆分为子列表