我有桌子:
tel size 1 2 3 4
0 123 1 Baby Baby None None
1 234 1 Shave Shave None None
2 222 1 Baby Baby None None
3 333 1 Shave Shave None None
我想检查表1,2,3,4中的值是否与2个循环部分相等:
x = df_map.iloc[i,2:]
y = df_map.iloc[j,2:]
所以df_map.iloc [0,2:]应该等于df_map.iloc [2,2:], 和df_map.iloc [1,2:]等于df_map.iloc [3,2:],
我试过了:
x == y
和
y.eq(x)
但它返回错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
如果我使用(x == y).all()或(x == y).any(),则返回错误的结果。
我需要类似的东西:
if x== y:
counter += 1
更新
问题是无值。我使用了fillna('')和(x == y).all()
答案 0 :(得分:2)
fillna('')
因为None == None
是False
numpy
广播评估==
all(-1)
以确保整行符合np.fill_diagonal
因为我们不需要自我匹配np.where
找到匹配的位置v = df.fillna('').values[:, 2:]
match = ((v[None, :] == v[:, None]).all(-1))
np.fill_diagonal(match, False)
i, j = np.where(match)
pd.Series(i, j)
2 0
3 1
0 2
1 3
dtype: int64
答案 1 :(得分:0)
pandas系列(行,列)的类型是numpy数组,你只能按列到列获得结果,除非你从结果中再次循环,这也是另一个数组
import numpy as np
x = df_map[i,2:]
y = df_map[j,2:]
np.equal(y.values,x.values)