熊猫条件列数

shishy

我有一个看起来像这样的数据框:

a1   |  a2  |  b3  |  b4  |  b5  |  c | d
 1   |   2  |   3  |  4   |   5  |  1 | 1 
 1   |   4  |   5  |  3   |   2  |  0 | 0
 2   |   3  |   1  |  1   |   0  |  0 | 0

我想创建两列,“ a_count”和“ b_count”。

对于“ d”的值为1或“ c”的值为0的每一行:

  • “ a_count”应表示“ 1”出现在a1或a2中的次数

  • “ b_count”应表示在b3 / b4 / b5中出现“ 1”的次数

如果'd'和'c'均为0,则应为0。

所以结果输出看起来像...

a1   |  a2  |  b3  |  b4  |  b5  |  c  |     d     |  a_count  | b_count
 1   |   2  |   3  |  4   |   5  |  0  |     0     |     0     |    0
 1   |   4  |   5  |  3   |   2  |  1  |     0     |     1     |    0
 1   |   1  |   1  |  1   |   0  |  0  |     1     |     2     |    2

如果我分别计算a_count和b_count很好。我想我可以使用np.where等的组合,但是我认为让我感到困惑的是想知道如何在a1 / a2或b3 / b4 / b5列中获取计数,其中相应的值为1且条件为c和d被满足。

也许这是一个直截了当的问题,但我的大脑现在才刚刚炸掉:(如果太琐碎,有人可以将我指向正确的方向吗?

特德·彼得鲁(Ted Petrou)

是的,np.where是解决此问题的不错选择。

df['a_count'] = np.where((df['c'] == 0) & (df['d'] == 0), 0, (df[['a1', 'a2']]==1).sum(1))
df['b_count'] = np.where((df['c'] == 0) & (df['d'] == 0), 0, (df[['b3', 'b4', 'b5']]==1).sum(1))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章