首页 > 解决方案 > 根据 Pandas DataFrame 列中的值序列查找行的索引

问题描述

我有一个包含三个唯一字符串的列的 DataFrame。我需要做的是生成一个列表,其中包含行的索引,这些索引在良好之后具有“非常糟糕”,但在“糟糕”之后不是“非常糟糕”。

import random
df = pd.DataFrame({
    'measure': [random.randint(0,10) for _ in range(0,20)],
})

df['status'] = df.apply(
    lambda x: 'good' if x['measure'] > 4 else 'very bad' if x['measure'] < 2  else 'bad',
    axis=1)
    measure    status
0         8      good
1         8      good
2         0  very bad
3         5      good
4         2       bad
5         3       bad
6         9      good
7         9      good
8        10      good
9         5      good
10        1  very bad
11        7      good
12        7      good
13        6      good
14        5      good
15       10      good
16        3       bad
17        0  very bad
18        3       bad
19        5      good

我希望得到这个列表:

[2, 10]

有没有一种解决方案?

我不想使用数值,因为它们在这里纯粹用于生成 DataFrame 或遍历所有行,这对我的用例来说计算成本很高。

标签: pythonpython-3.xpandasdataframe

解决方案


如果您的数据帧索引是默认范围索引,那么您可以使用这个:

np.where((df['status'] == 'very bad') & (df['status'].shift() == 'good'))[0]

输出:

array([ 2, 10], dtype=int64)

否则,您可以使用以下内容:

irow = np.where((df['status'] == 'very bad') & (df['status'].shift() == 'good'))[0]
df.index[irow]

推荐阅读