stół obrotowy, ale zatrzymaj NAN

(df.groupby(['Date', 'A']).B
   .apply(lambda x: np.nan if x.isna().all() else x.sum())
   .unstack('A')
)
Smoggy Sandpiper