Pandas 数据框 - 运行总和并重置

Posted

技术标签:

【中文标题】Pandas 数据框 - 运行总和并重置【英文标题】:Pandas dataframe - running sum with reset 【发布时间】:2015-12-29 15:47:20 【问题描述】:

我想计算给定列中的运行总和(当然不使用循环)。需要注意的是,我有另一列指定何时将运行总和重置为该行中存在的值。最好用下面的例子来解释:

   reset  val   desired_col
0      0    1   1
1      0    5   6
2      0    4   10
3      1    2   2
4      1   -1   -1
5      0    6   5
6      0    4   9
7      1    2   2

desired_col是我要计算的值。

【问题讨论】:

【参考方案1】:

你可以使用2次cumsum()

#   reset  val  desired_col
#0      0    1            1
#1      0    5            6
#2      0    4           10
#3      1    2            2
#4      1   -1           -1
#5      0    6            5
#6      0    4            9
#7      1    2            2
df['cumsum'] = df['reset'].cumsum()
#cumulative sums of groups to column des
df['des']= df.groupby(['cumsum'])['val'].cumsum()
print df
#   reset  val  desired_col  cumsum  des
#0      0    1            1       0    1
#1      0    5            6       0    6
#2      0    4           10       0   10
#3      1    2            2       1    2
#4      1   -1           -1       2   -1
#5      0    6            5       2    5
#6      0    4            9       2    9
#7      1    2            2       3    2
#remove columns desired_col and cumsum
df = df.drop(['desired_col', 'cumsum'], axis=1)
print df
#   reset  val  des
#0      0    1    1
#1      0    5    6
#2      0    4   10
#3      1    2    2
#4      1   -1   -1
#5      0    6    5
#6      0    4    9
#7      1    2    2

【讨论】:

以上是关于Pandas 数据框 - 运行总和并重置的主要内容,如果未能解决你的问题,请参考以下文章

组内的 Cumsum 并在 pandas 的条件下重置

在 Python Pandas 中使用 cumsum 和 groupby 并在值为 0 时重置 cumsum

计算 Pandas 中每天重置的累积盘中指标

在运行时重置 Datagridview 组合框数据

根据条件重置的 7 天累积总和

Pandas 计数器通过跳过一行来计数并重置不同的值