计算大型数据框中的正列数

Count number of positive columns from large dataframe

我有一个包含 500 列的大型 DataFrame,其中 300 列 col1, col2, ..col300 如下所示:

idx col1    col2
a   -1      4
b    2      1
c   -1     -1

我想获取 300 列的以下内容。其他200列是我不感兴趣的变量:

idx col1    col2  numPos
a   -1      4     1
b    2      1     2
c   -1     -1     0

我想为每一行获取正值的数量。我不想使用 apply 方法,因为 DataFrame 中大约有 200 万行。有没有 pythonic 的方法来做到这一点?

您可以 select 列 + gt(创建一个布尔数据帧,如果值为正则它为真)+ sum 轴:

df['numPos'] = df[['col1','col2']].gt(0).sum(axis=1)

也许你也可以过滤它们,比如:

df['numPos'] = df.filter(like='col').gt(0).sum(axis=1)

输出:

  idx  col1  col2  numPos
0   a    -1     4       1
1   b     2     1       2
2   c    -1    -1       0

最好的办法是排除对象列,查询df中大于0的是什么,然后沿行轴求和

  df['numPos']= df.select_dtypes(exclude='object').gt(0).sum(1)



  idx  col1  col2  status
0   a    -1     4       2
1   b     2     1       3
2   c    -1    -1       0

df['numPos'] = (df[cols] > 0).sum(axis=1) 其中 cols 是列名列表。如果 300 列是连续的,那么可以使用 df.iloc[:,start_offset:start_offset+300] 代替 df[cols],其中 start_offset 是第一列的索引。