56738


Pythonを使って2つのDataframeの一致件数を確認したいと思っております。

20万件近いデータを比較しており、一致件数は10万以上あるはずが、  
実際に一致した件数は20件未満とごく少数です。

実際の件数として合わない理由に関しておわかりになれば、ご指導お願いします。

[code]

    df_a = pd.read_csv(file_before, header=None, usecols=[1, 2, 10, 11],
                            names=['A', 'B', 'C', 'D'],
                            dtype={'A': 'str', 'B': 'str', 'C': 'int', 'D': 'float'},
                            encoding='shift-jis')
    
    df_b = pd.read_csv(file_after, header=None, usecols=[1, 2, 10, 11],
                            names=['A', 'B', 'C', 'D'],
                            dtype={'A': 'str', 'B': 'str', 'C': 'int', 'D': 'float'},
                            encoding='shift-jis')
    
    for row2 in df_a.itertuples(name=None):
        csvRow = []
        for row1 in df_b.itertuples(name=None):
            if (row2 == row1):
                print(row1[0], row1[1], row1[2], row1[3], row1[4])
                csvRow.append(row1[1])
                csvRow.append(row1[2])
                csvRow.append(row1[3])
                csvRow.append(row1[4])
                writer.writerow(csvRow)
                csvRow.clear()
    
    csvFile.close()
    
[/code]


CC BY-SA 4.0
2019-07-18T22:40:40.353
56734
2019-07-19T03:17:57.897
2019-07-19T00:15:39.257
3060
31870
question
python pandas matplotlib csv
Pythonにおける2つのDataframeの一致件数の確認


おそらく、ソース上の`if (row2 ==
row1):`の比較方法では、`index`(行番号?)であろう`row1[0]`と`row2[0]`まで比較対象となってしまうからでは？

データ内容だけではなく、行番号まで同じでないと、同一とは見なされないことになってしまっているのだと思われます。

[how to use pandas isin for multiple
columns](https://stackoverflow.com/q/45198786/9014308)  
上記のような記事があり、2つ目の回答の [inner merge](https://pandas.pydata.org/pandas-
docs/stable/user_guide/merging.html#database-style-dataframe-or-named-series-
joining-merging) というのが簡単そうですので試してみては如何でしょうか。  
以下の様にすれば、一致する行だけを含むDataFrameが出来そうです。

[code]

    df_c = pd.merge(df_b, df_a, how='inner')
    
[/code]

出来た df_c の行数を数えるなり、to_csv() でファイルにするなり、加工できるのでは？


CC BY-SA 4.0
2019-07-19T03:17:57.897
56738
2019-07-19T03:17:57.897
26370
56734
answer