假设我有一个熊猫数据帧,如下所示:
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