熊猫:数据帧按行比较

萨德

我有两个数据框,我想逐行比较它们的相等性。我对计算非联接属性具有相同值的行数感兴趣。

例如,

import pandas as pd

df1 = pd.DataFrame({'a': [1,2,3,5], 'b': [2,3,4,6], 'c':[60,20,40,30], 'd':[50,90,10,30]})
df2 = pd.DataFrame({'a': [1,2,3,5], 'b': [2,3,4,6], 'c':[60,20,40,30], 'd':[50,90,40,40]})

我将在列a上加入这两个数据框b有两排(前两个),其具有相同的值,cd在两个数据帧。

我目前正在使用以下方法,首先将这两个数据帧合并,然后计算每一行的值是否相等。

df = df1.merge(df2, on=['a','b'])
cols1 = [c for c in df.columns.tolist() if c.endswith("_x")]
cols2 = [c for c in df.columns.tolist() if c.endswith("_y")] 
num_rows_equal = 0

for index, row in df.iterrows():
    not_equal = False
    for col1,col2 in zip(cols1,cols2):
        if row[col1] != row[col2]:
            not_equal = True
            break
    if not not_equal:  # row values are equal
        num_rows_equal += 1

num_rows_equal

有没有更有效的(pythonic)方法来达到相同的结果?

加布里埃拉·梅洛

实现该目标的更简单方法:

import pandas as pd

df1 = pd.DataFrame({'a': [1,2,3,5], 'b': [2,3,4,6], 'c':[60,20,40,30], 'd':[50,90,10,30]})
df2 = pd.DataFrame({'a': [1,2,3,5], 'b': [2,3,4,6], 'c':[60,20,40,30], 'd':[50,90,40,40]})
df = df1.merge(df2, on=['a','b'])

comparison_cols = [c.strip('_x') for c in df.columns.tolist() if c.endswith("_x")]
num_rows_equal = (df1[comparison_cols][df1[comparison_cols] == df2[comparison_cols]].isna().sum(axis=1) == 0).sum()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章