我有一个像下面这样的数据框架,每个索引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
循环最不令人头疼。