如何使用True / False值Pandas Python

时间:2018-03-08 23:18:23

标签: python pandas

我有以下数据

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默认函数

3 个答案:

答案 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