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
值?