pandas groupby time获得NaN的数量和总数

pandas groupby time获得NaN的数量和总数,pandas,Pandas,我有这个数据框: start_time is_set 0 2017-03-24 11:08:50 NaN 1 2017-03-24 11:08:50 1 2 2017-03-24 12:09:00 2 3 2017-03-24 12:20:00 1 4 2017-03-24 12:25:10 2 5 2017-03-23 15:30:16 NaN 6 2017-03-23 15

我有这个数据框:

  start_time                 is_set
0 2017-03-24 11:08:50        NaN
1 2017-03-24 11:08:50        1
2 2017-03-24 12:09:00        2
3 2017-03-24 12:20:00        1
4 2017-03-24 12:25:10        2
5 2017-03-23 15:30:16        NaN
6 2017-03-23 15:50:35        NaN
7 2017-03-23 21:39:08        1
8 2017-03-23 21:41:20        1
9 2017-03-23 23:31:34        2
我想对每小时的行进行分组,并计算每个组的NAN数和总数,结果应该是:

  start_time                 nans     total
0 2017-03-24 11              1         2 
1 2017-03-24 12              0         3
2 2017-03-23 15              2         2
3 2017-03-23 21              0         2
4 2017-03-23 23              0         1

让我们试试
groupby.agg

new_df = df.groupby(df['start_time'].dt.floor('H'))['is_set'].agg([lambda x: x.isna().sum(), 'size'])
new_df.columns = ['nans','total']
输出:

                     nans  total
start_time                      
2017-03-23 15:00:00   2.0      2
2017-03-23 21:00:00   0.0      2
2017-03-23 23:00:00   0.0      1
2017-03-24 11:00:00   1.0      2
2017-03-24 12:00:00   0.0      3
您还可以使用命名agg:

(df.groupby(df['start_time'].dt.floor('H'))
   .agg(nans=('is_set',lambda x: x.isna().sum()),
         total=('is_set', 'size')
       )
   .reset_index()
)