Python 基于表中的另一列运行求和

Python 基于表中的另一列运行求和,python,pandas,Python,Pandas,我有一个如下所示的数据帧: col1 col2 0 1 True 1 3 True 2 3 True 3 1 False 4 2 True 5 3 True 6 2 False 7 2 True col1 col2 col3 0 1 True 0 1 3 True 0 2 3 True 0 3 1 False

我有一个如下所示的数据帧:

   col1   col2
0     1   True
1     3   True
2     3   True
3     1  False
4     2   True
5     3   True
6     2  False
7     2   True
   col1   col2  col3
0     1   True     0
1     3   True     0
2     3   True     0
3     1  False     7
4     2   True     0
5     3   True     0
6     2  False     5
7     2   True     0
我想得到
True
值的运行总和。每当我在
col2
中看到一个
False
值时,我需要取
col1
到该点的累计和。因此,数据帧如下所示:

   col1   col2
0     1   True
1     3   True
2     3   True
3     1  False
4     2   True
5     3   True
6     2  False
7     2   True
   col1   col2  col3
0     1   True     0
1     3   True     0
2     3   True     0
3     1  False     7
4     2   True     0
5     3   True     0
6     2  False     5
7     2   True     0

如何执行此操作?

您可以在
col2
上使用cumsum创建一个组变量,然后计算每个组的总和:

df.loc[~df.col2, 'col3'] = (df.col1 * df.col2).groupby(by = (~df.col2).cumsum()).cumsum().shift()
df.fillna(0)

您可以在
col2
上使用cumsum创建一个组变量,然后计算每个组的总和:

df.loc[~df.col2, 'col3'] = (df.col1 * df.col2).groupby(by = (~df.col2).cumsum()).cumsum().shift()
df.fillna(0)

您可以使用更通用的解决方案,该解决方案可以很好地处理多个连续的
False
-然后累积和值不会改变:

a = df.groupby((df.col2 != df.col2.shift()).cumsum())['col1'].transform('sum')
df['d'] = a.where(df.col2).ffill().mask(df.col2).fillna(0).astype(int)
print (df)
   col1   col2  d
0     1   True  0
1     3   True  0
2     3   True  0
3     1  False  7
4     2   True  0
5     3   True  0
6     2  False  5
7     2   True  0


您可以使用更通用的解决方案,它可以很好地处理多个连续的
False
-然后累积和值不会改变:

a = df.groupby((df.col2 != df.col2.shift()).cumsum())['col1'].transform('sum')
df['d'] = a.where(df.col2).ffill().mask(df.col2).fillna(0).astype(int)
print (df)
   col1   col2  d
0     1   True  0
1     3   True  0
2     3   True  0
3     1  False  7
4     2   True  0
5     3   True  0
6     2  False  5
7     2   True  0


问题。你有什么问题吗?“如果你有任何问题,请告诉我。”你试过什么吗?你在这里运行一些是什么意思?是的,我不知道如何让循环查看col2来决定何时停止添加COL3如果你不知道你想要什么我们怎么做know@jth359-是否可能出现一些连续的
False
值?问题。你有什么问题吗?“如果你有任何问题,请告诉我。”你试过什么吗?你在这里运行一些是什么意思?是的,我不知道如何让循环查看col2来决定何时停止添加COL3如果你不知道你想要什么我们怎么做know@jth359-是否可能存在一些连续的
False
值?