在下面的df中,变量“group”中有三个组-“A”、“AB”、“C”。df中的其他列通过后缀- var1_A关联到组A等分配给特定组。
data = pd.DataFrame({'group':['A', 'AB', 'A', 'AB', 'AB', 'C', 'C', 'A', 'A', 'AB'],
'var1_A':['pass', 'fail', 'pass','fail', 'pass']*2,
'var2_A':['pass', 'pass', 'pass','fail', 'pass']*2,
'var1_AB':['pass', 'pass', 'pass','fail', 'pass']*2,
'var2_AB':['pass', 'pass', 'fail','fail', 'pass']*2,
'var1_C':['pass', 'pass', 'pass','fail', 'pass']*2,
'var2_C': ['fail', 'fail', 'fail','fail', 'pass']*2
})
我想为每一行计数'通过'发生的次数。对于属于组A的示例,我只想计数连接到组A的变量。我想在一个新的列中得到结果。这几乎可以完成工作。
data['new_col'] = data[data['group']=='A']['var1_A, var2_A].isin(['pass']).sum(1)
data['new_col'] = data[data['group']=='AB']['var1_AB, var2_AB].isin(['pass']).sum(1)
data['new_col'] = data[data['group']=='C']['var1_C, var2_C].isin(['pass']).sum(1)
然而,我希望所有组的结果都在同一列中。这个操作也许可以使用groupby和transform来完成。但是,我被困在了计算中。
目标 Dataframe :
pd.DataFrame({'group':['A', 'AB', 'A', 'AB', 'AB', 'C', 'C', 'A', 'A', 'AB'],
'var1_A':['pass', 'fail', 'pass','fail', 'pass']*2,
'var2_A':['pass', 'pass', 'pass','fail', 'pass']*2,
'var1_AB':['pass', 'pass', 'pass','fail', 'pass']*2,
'var2_AB':['pass', 'pass', 'fail','fail', 'pass']*2,
'var1_C':['pass', 'pass', 'pass','fail', 'pass']*2,
'var2_C': ['fail', 'fail', 'fail','fail', 'pass']*2,
'result':[2,2,2,0,2,1,1,2,0,2]
})
'''
1条答案
按热度按时间t30tvxxf1#
您可以
melt
、过滤器和groupby.count
:或者使用矩阵和字符串比较的另一种方法:
输出: