Pandas 数据框 - 集群内的累积和

1 投票
1 回答
651 浏览
提问于 2025-05-01 15:05

我有

    x  cluster_id
0   1      1
1   3      1
2   2      2
3   5      2
4   4      3

我想生成

    x  cluster_id   s
0   1      1        1
1   3      1        4
2   2      2        3
3   5      2        7
4   4      3        4

也就是说,sx 的运行总和,但当集群 ID 变化时,它会被重置。这个是怎么做到的呢?

另外,如果这样更简单的话,可以考虑这样做

    x  cluster_id   s
0   1      1        4
1   3      1        4
2   2      2        7
3   5      2        7
4   4      3        4

也就是说,同一个集群内的所有 s 值都是相同的,并且对应于该集群的总和。

此外,我还想对这个数据进行抽样,以便保留每个集群的最后一行:

    x  cluster_id   s
1   3      1        4
3   5      2        7
4   4      3        4

(注意所有的集群 ID 都是不同的)。我该怎么做呢?

暂无标签

1 个回答

2

你可以使用 .cumsum().groupby() 来计算运行总和。

>>> df
   x  cluster_id
0  1           1
1  3           1
2  2           2
3  5           2
4  4           3
>>> df['s'] = df.groupby('cluster_id').cumsum()
>>> df
   x  cluster_id  s
0  1           1  1
1  3           1  4
2  2           2  2
3  5           2  7
4  4           3  4

然后,如果你只想要每个 cluster_id 的最后一行数据,可以这样做:

>>> df.groupby('cluster_id').last().reset_index()
   cluster_id  x  s
0           1  3  4
1           2  5  7
2           3  4  4

撰写回答