我想對兩個條件之間的連續行值求和。這是我的資料框:
df = pd.DataFrame({'A': ["yes","no","no","no","no","yes","yes","no","no","no","yes"],'B':["no","no","no","no","yes","yes","no","no","no","yes","yes"],'C':[2,5,1,4,6,13,7,8,3,9,1]},index=[0, 1, 2, 3,4,5,6,7,8,9,10])
事實上,當A="yes"和時B="no",我想開始添加行值直到A="no"和B="yes"。我想得到以下結果:
df1 = pd.DataFrame({'A': ["yes","yes"],'B':["no","no"],'C':[12,18]},index=[0, 6])
uj5u.com熱心網友回復:
您可以使用布爾掩碼兩次來獲得所需的結果。
在第一個掩碼中,您過濾需要查找其總和的行。在第二個中,您找到總和。
mask = df.apply(lambda x: 1 if (x['A']=='yes')&(x['B']=='no') else (-1 if (x['A']=='no')&(x['B']=='yes') else 0), axis=1).cumsum().astype(bool)
mask2 = df[mask].apply(lambda x: 1 if (x['A']=='yes') & (x['B']=='no') else 0, axis=1)
out = df[mask][mask2.astype(bool)]
out['C'] = df[mask].groupby(mask2.cumsum())['C'].sum().to_numpy()
輸出:
A B C
0 yes no 12
6 yes no 18
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/402322.html
標籤:
