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



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

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排。最有效的方法是什么?

您可以使用DataFrameGroupBy.nunique并通过DataFrame.ne:比较不等于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')]

使用DataFrame.duplicated查找不唯一的行。

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

相关内容

  • 没有找到相关文章

最新更新