【问题标题】:Pandas dataframe - running sum within clusterPandas 数据框 - 在集群内运行总和
【发布时间】:2014-11-04 18:01:43
【问题描述】:

我有

    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 都不同)。我该怎么做?

【问题讨论】:

    标签: python pandas dataframe cumulative-sum


    【解决方案1】:

    您可以使用.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
    

    【讨论】:

    • 下采样部分怎么样?
    • 啊,我第一次错过了。我刚刚编辑了答案以包括二次抽样。
    • 酷,我马上接受。顺便说一句,为什么我需要 reset_index() 部分?
    • 如果没有.reset_index().groupby() 将使用分组值(在这种情况下为cluster_id)作为索引。
    猜你喜欢
    • 2015-12-29
    • 2021-07-24
    • 2018-11-07
    • 2020-07-18
    • 2019-02-03
    • 1970-01-01
    • 2018-08-24
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多