Pandas 数据框 - 集群内的累积和
我有
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
也就是说,s
是 x
的运行总和,但当集群 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