我希望我能正确地解释我的问题。.我有一个数据框(306x40),其中包含包含特定组数据的多行,我需要按索引对它们进行分组,这没有问题。接下来,我需要将这些行与具有特定条件的另一行进行比较。以以下数据为例:
Id Condition var1 var2 var3
1 1 0 1 0
1 3 1 1 0
2 2 0 0 1
2 3 0 0 1
2 1 0 0 1
因此,我需要将每个Id的var1,var2,var3与具有条件3的行进行比较。结果会让我知道任何变量都不同于条件3中的变量。可能的输出:
Id Condition var1 var2 var3 count_false
1 1 false true true 1
1 3 NaN NaN NaN NaN
2 2 true true true 0
2 3 NaN NaN NaN NaN
2 1 true true true 0
或者只是简单地说条件x与y Id的条件3不同
我希望你们能理解我的需求,但我很乐于阐述
提前非常感谢您!
编辑以使其更清楚:
数据由来自3种不同方法的患者细菌检测数据(临床数据)组成,请注意,每位患者使用的方法和次数不同。所以我有方法1、2、3,这些是不同的条件。变量是发现的不同细菌。方法1和2是黄金标准,方法3是需要验证的标准。所以我想看看方法3是否给出与方法1或方法2相同的结果。30多个变量是细菌,值1表示存在细菌,而0不存在。
与所需(条件)行进行比较时,#x!= x.loc [i]为您提供每一行的真值。其余代码如下:
df=pd.DataFrame([[1,1,0,1,0],[1,3,1,1,0],[2,2, 0,0,1],[2,3, 0,0,1],[2,1, 0,0,1]],columns=['ID','Condition','var1','var2','var3'])
def comp(x):
i=x.index[x['Condition']==3][0]
#print(x!=x.loc[i])
truth=(x[['var1','var2','var3']]==x.loc[i,['var1','var2','var3']])
x=pd.concat([x[['ID','Condition']],truth],axis=1)
return x
grp=df.groupby('ID').apply(comp)
grp['count_false']=grp[['var1','var2','var3']].apply(lambda x: 3-x.sum(),axis=1)
print(grp)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句