【问题标题】:Python dataframe get index start and end of successive valuesPython数据框获取连续值的索引开始和结束
【发布时间】:2020-06-14 01:37:59
【问题描述】:

假设我有这个数据框:

   0
0  1
1  1
2  1
3  2
4  2
5  3
6  3
7  1
8  1

我想在数据框中存储每个值(甚至是重复值)的开始和结束索引以及对应的值。

所以我会得到这样的结果,例如:

Value    |   Start   |   End
----------------------------
1        |     0     |    2
2        |     3     |    4
3        |     5     |    6
1        |     7     |    8

我试过这个(例如这里的值 2):

cs[['key']] = pd.DataFrame(cs.pop(0).values.tolist())
g = cs.groupby('key')
idx_start, idx_end = g.get_group(2).index[[0,-1]]

但这每次只返回第一个和最后一个结果。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    给定

    >>> df
       0
    0  1
    1  1
    2  1
    3  2
    4  2
    5  3
    6  3
    7  1
    8  1
    

    解决方案:

    starts_bool = df.diff().ne(0)[0]
    starts = df.index[starts_bool]
    ends = df.index[starts_bool.shift(-1, fill_value=True)]
    
    result = (df.loc[starts]
                .reset_index(drop=True)
                .assign(Start=starts, End=ends)
                .rename({0: 'Value'}, axis='columns')
              )
    

    结果:

    >>> result
       value  Start  End
    0      1      0    2
    1      2      3    4
    2      3      5    6
    3      1      7    8
    

    【讨论】:

    • 谢谢!这正是我所需要的。