Python 计算某个条件所在字段中每行的列数
我有一个熊猫数据框,如下所示:Python 计算某个条件所在字段中每行的列数,python,pandas,Python,Pandas,我有一个熊猫数据框,如下所示: data = pd.DataFrame({'w1':[0,1,0],'w2':[5,8,0],'w3':[0,0,0],'w4' :[5,1,0], 'w5' : [7,1,0],'condition' : [5,1,0]}) 我需要有一个列,对于每一行,计算其值等于“条件”的列数(除“条件”之外的列)。 最终输出应如下所示: 我不想写for循环 作为解决方案,我想用np替换等于“条件”的值,用1替换其他值,其中如下所示,然后对每行的1求和,这是没有帮助的:
data = pd.DataFrame({'w1':[0,1,0],'w2':[5,8,0],'w3':[0,0,0],'w4' :[5,1,0], 'w5' : [7,1,0],'condition' : [5,1,0]})
我需要有一个列,对于每一行,计算其值等于“条件”的列数(除“条件”之外的列)。
最终输出应如下所示:
我不想写for循环
作为解决方案,我想用np替换等于“条件”的值,用1替换其他值,其中如下所示,然后对每行的1求和,这是没有帮助的:
data = pd.DataFrame(np.where(data.loc[:,data.columns != 'condition'] == data['condition'], 1, 0), columns = data.columns)
这只是一个想法(我的意思是将值替换为1和0),但是任何pythonic解决方案都是值得的。比较所有没有last by column条件的列,并通过sum
计算True
s:
data['new'] = data.iloc[:, :-1].eq(data['condition'], axis=0).sum(axis=1)
另一个想法是将所有列与removecondition
col进行比较:
data['new'] = data.drop('condition', axis=1).eq(data['condition'], axis=0).sum(axis=1)
感谢您在@Sayandip Dutta发表评论,您的想法是比较所有列并删除1
:
data['new'] = data.eq(data['condition'], axis=0).sum(axis=1).sub(1)
比较所有不带last by column条件的列
和countTrue
s bysum
:
data['new'] = data.iloc[:, :-1].eq(data['condition'], axis=0).sum(axis=1)
另一个想法是将所有列与removecondition
col进行比较:
data['new'] = data.drop('condition', axis=1).eq(data['condition'], axis=0).sum(axis=1)
感谢您在@Sayandip Dutta发表评论,您的想法是比较所有列并删除1
:
data['new'] = data.eq(data['condition'], axis=0).sum(axis=1).sub(1)
为什么用0/1代替实际的布尔值?为什么用0/1代替实际的布尔值?