验证数据框中的行在列中的值之间是否相等

2024-06-26 14:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个熊猫数据框,如下所示:

   C30    C25    C20    C15    C10
1  AJA    EJE    IJI    OJO    UJU
2  AJA    EJE    IJI    OJO    UJU
3  AJA    EJE    IJI    OJO    UJU
4  ABA    EBE    IBI    OBO    UBU
5  ABA    EBE    IBI    OBO    UBU
6  ABA    EBE    IBI    OBO    UNU
7  BOB    BIB    BEB    BAB    BUB

我想验证C30中具有相等值的所有行在C25、C20、C15和;C10

我有大约60000行,列值变化很大,如果列C30中的元素相等,那么相应的列C25元素也应该相等,以此类推

例如,验证应显示不匹配,因为第6行中的C10值不等于4&;5排。最有效的方法是什么


Tags: oboabac10c30c15c20ajac25
2条回答

使用^{}查找不唯一的行

df['is_dup'] = df.duplicated(keep=False)

输出

   C30  C25  C20  C15  C10  is_dup
1  AJA  EJE  IJI  OJO  UJU    True
2  AJA  EJE  IJI  OJO  UJU    True
3  AJA  EJE  IJI  OJO  UJU    True
4  ABA  EBE  IBI  OBO  UBU    True
5  ABA  EBE  IBI  OBO  UBU    True
6  ABA  EBE  IBI  OBO  UNU   False
7  BOB  BIB  BEB  BAB  BUB   False

您可以使用^{}并通过^{}对不相等的1进行比较:

m = df.groupby('C30').nunique().ne(1)
print (m)
       C25    C20    C15    C10
C30                            
ABA  False  False  False   True
AJA  False  False  False  False
BOB  False  False  False  False

如果需要值,如果没有匹配的值,则使用np.where

i, c  = np.where(m)

L = list(zip(m.index[i], m.columns[c]))

if len(L) > 0:
    print ('mismatch')
    print (L)
mismatch
[('ABA', 'C10')]
    

相关问题 更多 >