【问题标题】:Calculate cumulative sum from last non-zero values for each column of a dataframe in python计算python中数据框每一列的最后一个非零值的累积和
【发布时间】:2019-06-13 14:10:38
【问题描述】:

假设我在下面有一个数据框。对于每一列,我有许多零和一些非零值。我想计算每列的累积和,但我希望在出现零值时重置累积和。

我的原始数据框:

pd.DataFrame({'a':[1,0,1,0,1,0,1,1],'b':[1,0,0,0,0,1,1,1]})

   a  b
0  1  1
1  0  0
2  1  0
3  0  0
4  1  0
5  0  1
6  1  1
7  1  1

我想要这样的累积总和:

   a  b
0  1  1
1  0  0
2  1  0
3  0  0
4  1  0
5  0  1
6  1  2
7  2  3

是否可以在没有循环的情况下在 python 中做到这一点?谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    一种方法是为每列创建自定义分组器,使用 0 检查元素方面的相等性,并获取结果系列布尔值的 cumsum,并使用 cumsum 进行转换:

    g = df.eq(0).cumsum()
    df.apply(lambda x: x.groupby(g[x.name]).transform('cumsum'))
    
       a  b
    0  1  1
    1  0  0
    2  1  0
    3  0  0
    4  1  0
    5  0  1
    6  1  2
    7  2  3
    

    【讨论】:

      【解决方案2】:

      你不能完全避免循环, 但你可以避免正式的循环符号。

      sum(x-1000 if x > 1000 else x for x in x_sph_rand) 会用一个生成器来做,这会更好一些,但仍然使用循环......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-18
        • 2014-11-21
        • 1970-01-01
        • 2019-04-07
        • 2014-01-03
        • 1970-01-01
        相关资源
        最近更新 更多