pandas でテーブルを結合した後のレコードのカウント方法を調査してみました。
both
コード
import pandas as pd
df = pd.DataFrame({
"_merge": ["both", "left_only", "both", "both"],
"XXX_ID": [1, 2, 1, 3]
})
print(int((df["_merge"] == "both").sum()))
print(int(df[df["_merge"] == "both"]["XXX_ID"].nunique()))
まとめ
| 式 |
重複除外 |
NaN除外 |
内容 |
| `(df["_merge"] == "both").sum()` |
❌ |
✅ |
`both` に一致する**全行数** |
| `df[df["_merge"] == "both"].drop_duplicates().shape[0]` |
✅ |
✅ |
`both` に一致する**重複なし行数** |
| `df[df["_merge"] == "both"]["XXX_ID"].nunique()` |
✅ |
✅ |
`both` での**ユニークID数** |
right_only
コード
import pandas as pd
df = pd.DataFrame({
"_merge": ["right_only", "right_only", "right_only", "both"],
"XXX_ID": [10, 10, 20, 10]
})
print(int((df["_merge"] == "right_only").sum()))
print(int(df[df["_merge"] == "right_only"].drop_duplicates().shape[0]))
print(int(df[df["_merge"] == "right_only"]["XXX_ID"].nunique()))
まとめ
| コード |
重複除外 |
結果 |
意味 |
| `(df["_merge"] == "right_only").sum()` |
❌ |
すべての行数 |
フィルタだけ |
| `df[df["_merge"] == "right_only"].drop_duplicates().shape[0]` |
✅ |
重複除外した行数 |
全列で重複判定 |
| `df[df["_merge"] == "right_only"]["XXX_ID"].nunique()` |
✅ |
重複除外したID数 |
特定カラムでユニーク |
right_only
コード
import pandas as pd
df = pd.DataFrame({
"_merge": ["left_only", "left_only", "left_only", "both"],
"XXX_ID": [1, 1, 2, 1]
})
print(int((df["_merge"] == "left_only").sum()))
print(int(df[df["_merge"] == "left_only"].drop_duplicates().shape[0]))
print(int(df[df["_merge"] == "left_only"]["XXX_ID"].nunique()))
まとめ
| コード |
重複除外 |
説明 |
| `(df["_merge"] == "left_only").sum()` |
❌ |
フィルタに合致する行数をそのままカウント |
| `df[df["_merge"] == "left_only"].drop_duplicates().shape[0]` |
✅ |
全列での重複を除外 |
| `df[df["_merge"] == "left_only"]["XXX_ID"].nunique()` |
✅ |
特定列のユニークな値の個数 |