统计数据帧的给定列集中非零列的数目-panda



我有一个如下所示的df

df:

Id   Jan20  Feb20  Mar20  Apr20  May20  Jun20  Jul20  Aug20  Sep20  Oct20  Nov20  Dec20  Amount
1    20     0      0      12     1      3      1      0      0      2      2      0      100
2    0      0      2      1      0      2      0      0      1      0      0      0      500
3    1      2      1      2      3      1      1      2      2      3      1      1      300

根据以上内容,我想计算Activeness值,它是月份列中非零列的数量,如下所示。

'Jan20', 'Feb20', 'Mar20', 'Apr20', 'May20', 'Jun20', 'Jul20',
'Aug20', 'Sep20', 'Oct20', 'Nov20', 'Dec20'

预期输出:

Id   Jan20  Feb20  Mar20  Apr20  May20  Jun20  Jul20  Aug20  Sep20  Oct20  Nov20  Dec20  Amount  Activeness
1    20     0      0      12     1      3      1      0      0      2      2      0      100    7
2    0      0      2      1      0      2      0      0      1      0      0      0      500    4
3    1      2      1      2      3      1      1      2      2      3      1      1      300    12

我尝试了以下代码:

df['Activeness'] = pd.Series(index=df.index, data=np.count_nonzero(df[['Jan20', 'Feb20', 
'Mar20', 'Apr20', 'May20', 'Jun20', 'Jul20',
'Aug20', 'Sep20', 'Oct20', 'Nov20', 'Dec20']], axis=1)) 

这很有效,但我想知道有没有比这更快的方法。

您可以尝试:

df['Activeness'] = df.filter(like = '20').ne(0, axis =1).sum(1)

最新更新