我有以下数据
A B Result
3 True 0
1 True 0
5 True 0
6 False 9
2 True 0
6 True 8
如何获取false值之前和之后的所有真值的总和 如3 + 1 + 5 = 9和2 + 6 = 8
我如何使用Pandas Python默认函数
答案 0 :(得分:0)
如果B中只有一个False值,您可以这样做:
df.loc[df.B.idxmin(),'Result'] = df.loc[:df.B.idxmin()-1].A.sum()
df.loc[df.index[-1],'Result'] = df.loc[df.B.idxmin()+1:].A.sum()
df
Out[145]:
A B Result
0 3 True 0
1 1 True 0
2 5 True 0
3 6 False 9
4 2 True 0
5 6 True 8
答案 1 :(得分:0)
一种方法是在df.groupby.cumsum()
上使用pd.Series.cumsum()
:
df = pd.DataFrame({'A': [3, 1, 5, 6, 2, 6, 1, 4],
'B': [1, 1, 1, 0, 1, 0, 0, 1]})
df['B'] = df['B'].astype(bool)
df['result'] = df.groupby((~df['B']).cumsum())['A'].cumsum().shift()
df.loc[df['B'] | (df.index == df.index[-1]), 'result'] = 0
# A B result
# 0 3 True 0.0
# 1 1 True 0.0
# 2 5 True 0.0
# 3 6 False 9.0
# 4 2 True 0.0
# 5 6 False 8.0
# 6 1 False 6.0
# 7 4 True 0.0
答案 2 :(得分:0)
以下是在dataFrame中获取True值总和的另一种方法。当您的dataFrame cloumn中有一个或多个False时,这将有效。' B'
## Get the index of all False values in column B and store it in lst
lst = df[df.B=='False'].index
sum=0
for i in range(len(lst)+1):
if i == 0 :
# Sum upto 1st False location
sum = df.iloc[:lst[i]].A.sum()
if i == len(lst):
# Sum from last False location to the end of row index
sum = df.iloc[lst[i-1]+1:].A.sum()
elif i!=0:
# Sum for intermediate False locations
sum = df.iloc[lst[i-1]+1:lst[i]].A.sum()
print ("iteration= %d, Sum = %d" %(i, sum))
# Clearing sum for next iteration
sum=0
输出看起来像
iteration= 0, Sum = 9
iteration= 1, Sum = 8
如果您的dataFrame中有多个False,
A B Result
0 3 True 0
1 1 False 0
2 5 True 0
3 6 False 9
4 2 True 0
5 6 True 8
输出如下:
iteration= 0, Sum = 3
iteration= 1, Sum = 5
iteration= 2, Sum = 8