вы можете создать столбец, содержащий сумму, подходящую для суммирования, если в колонке person2 есть кто-то с np.where
df['payout_sum'] = np.where(df.person2.notnull(), df.payout/2., df.payout)
Затем, используя concat
, groupby
и pd.Grouper
, вы можете получить результат:
df_tot = (pd.concat([df[['date','person1','payout_sum']].rename(columns={'person1':'person'}),
df[['date','person2','payout_sum']].rename(columns={'person2':'person'})
.dropna()])\
.groupby([pd.Grouper(key='date', freq='MS'),'person'])['payout_sum']
.sum().reset_index())
print (df_tot)
date person payout_sum
0 2012-01-01 AL 900.0
1 2012-01-01 DA 1700.0
2 2012-02-01 DA 1100.0
3 2012-02-01 LA 300.0
Интерес pd.Grouper
к «MS» заключается в том, что он будет повторять выборку к началу месяца, если у вас выплата в течение нескольких дней в месяце.