Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历所有dataframe列_Python_Pandas_Dataframe - Fatal编程技术网

Python 遍历所有dataframe列

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您需要检查一个

我想比较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您需要检查一个数据帧的整行是否等于另一个数据帧。您可以比较两个数据帧是否相等,然后使用轴=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