将列中的连续数字行转换为具有开始和结束信息的两列(pandas dataframe)



我有一个像下面这样的数据框架,每个索引i都有一个score

i   score
5   3.0
6   3.0
7   3.0
8   11.0
9   11.0
15  10.0
30  1.0
31  1.0
32  1.0
10  8.0
11  8.0
20  1.0
21  1.0
22  1.0

当分数相同时,我想折叠第一列中的信息。预期的结果如下所示:

start   end   score
5       7      3.0
8       9     11.0
15     15     10.0
30     32     1.0
10     11     8.0
20     22     1.0

您可以按连续值分组并聚合查找端点。Even适用于单个组,其中开始和结束是相同的。

df.groupby(df["score"].ne(df["score"].shift()).cumsum()).agg(
start=("i", "first"), end=("i", "last"), score=("score", "first")
)

start  end  score
score
1          5    7    3.0
2          8    9   11.0
3         15   15   10.0
4         30   32    1.0
5         10   11    8.0
6         20   22    1.0

这里不需要什么魔术。我想说,for循环最不令人头疼。

相关内容

最新更新