Python 遍历所有dataframe列
我想比较2个给定数据帧的所有行 如何优化以下代码以动态迭代给定数据帧的所有列Python 遍历所有dataframe列,python,pandas,dataframe,Python,Pandas,Dataframe,我想比较2个给定数据帧的所有行 如何优化以下代码以动态迭代给定数据帧的所有列 df1,df2=pd.read\u csv(…) 对于index2,df2.iterrows()中的第2行: 对于index1,df1.iterrows()中的第1行: 如果第1行[0]==第2行[0]:i=i+1 如果第1行[1]==第2行[1]:i=i+1 如果第1行[2]==第2行[2]:i=i+1 如果第1行[3]==第2行[3]:i=i+1 打印(“#相同值:“+str(i)) i=0 IIUC您需要检查一个
df1,df2=pd.read\u csv(…)
对于index2,df2.iterrows()中的第2行:
对于index1,df1.iterrows()中的第1行:
如果第1行[0]==第2行[0]:i=i+1
如果第1行[1]==第2行[1]:i=i+1
如果第1行[2]==第2行[2]:i=i+1
如果第1行[3]==第2行[3]:i=i+1
打印(“#相同值:“+str(i))
i=0
IIUC您需要检查一个数据帧的整行是否等于另一个数据帧。您可以比较两个数据帧是否相等,然后使用轴=1的方法检查行,然后对结果求和:
df1 = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [2, 3, 4, 5, 6]})
df2 = pd.DataFrame({'a': [1, 5, 3, 7, 5], 'b': [2, 3, 8, 5, 6]})
In [1531]: df1 == df2
Out[1531]:
a b
0 True True
1 False True
2 True False
3 False True
4 True True
In [1532]: (df1 == df2).all(axis=1)
Out[1532]:
0 True
1 False
2 False
3 False
4 True
dtype: bool
In [1533]: (df1 == df2).all(axis=1).sum()
Out[1533]: 2
result = (df1 == df2).all(axis=1).sum()
In [1535]: print("# same values: "+str(result))
# same values: 2
嵌套的
for
循环表明您正在将第一个数据帧的所有行
与第二个数据帧的所有行
进行比较,并计算相应列中的值相匹配的情况
如果是这样,您可以使用numpy
广播来sum
在df1
中相对于df2
中的所有行的每个行
的相等情况,然后对df1
中的所有行
进行求和
以获得这样的总数:
df1.apply(lambda x: np.sum(df2.values == x.values), axis=1)
举例来说,两个随机抽样的数据帧
:
df1 = pd.DataFrame(np.random.randint(1, 5, (10, 2)))
0 1
0 2 4
1 2 3
2 4 1
3 3 3
4 3 3
5 4 4
6 2 4
7 3 4
8 3 4
9 4 1
df2 = pd.DataFrame(np.random.randint(1, 5, (10, 2)))
0 1
0 3 2
1 3 4
2 4 4
3 2 3
4 4 3
5 4 1
6 4 1
7 3 4
8 3 1
9 1 4
将所有df1
行与所有df2
行进行比较后,获取所有df1
行的相等值之和
:
df1.apply(lambda x: np.sum(df2.values == x.values), axis=1)
0 5
1 3
2 7
3 6
4 6
5 8
6 5
7 8
8 8
9 7
然后你可以把这些案例加起来,或者一次完成所有这些:
df1.apply(lambda x: np.sum(df2.values == x.values), axis=1).sum()
63
您在哪里申报i
?能否为数据帧制作一个可复制的示例?要直接访问列名,请使用df1.columns