我有一个看起来像这样的数据框:
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被满足。
也许这是一个直截了当的问题,但我的大脑现在才刚刚炸掉:(如果太琐碎,有人可以将我指向正确的方向吗?
是的,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] 删除。
我来说两句