質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

1回答

2521閲覧

outerによるデータ結合で減った行の確認の仕方と減った理由

k_matsumot

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/12/23 02:38

編集2021/12/23 03:59

前提・実現したいこと

Python初心者です。pandasを使い、2つのデータフレームを2つのキーによりouterで結合しました。この時、以下のような状態になりました。

元データフレーム2つの行数の合計:450
2キーによりouterで結合した後のデータフレームの行数:448

このように結合後は2行減っています。この時、減った2行を確認するにはどうすればいいでしょうか。また、減った理由としては、結合時に使った2つのキーが重複していたからと考えてよいでしょうか。  

試したこと

減った2行を確認するため、以下のコードを書きました。しかし、出力された行が多く、上記の結果とは合致しません。

Python

1# 2つのデータフレームを縦方向に結合する 2import pandas as pd 3 4df_inspect = pd.concat([df1, df2], join='outer') 5 6# 重複行の抽出 7df_inspect_dup = df_inspect[df_inspect.duplicated(subset=['hoge1', 'hoge2'], keep=False)] 8display(df_inspect_dup)

環境

GoogleColaboratoryを使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppaul

2021/12/23 03:54

outerで結合というのと、join='inner'というのはどちらが正しいのですか?
k_matsumot

2021/12/23 04:01

ご指摘ありがとうございます。コードのほうの表記が違っていました。「outerで結合」が正しいです(自分の環境でouter以外にもいろいろな結合で実験していまして、コードにコピペする時に誤りました)。
siruku6

2021/12/23 06:38

「元データフレーム2つの行数の合計:450」とあるのですが、たとえば、df1, が200行、df2が250行、というような意味でしょうか? それとも、それぞれが450行ずつあるのでしょうか?
can110

2021/12/23 07:02

確認のため、.concatで結合した直後にprint(len(df1), len(df2), len(df_inspect)) した結果を記載ください。
k_matsumot

2021/12/26 23:47 編集

siruku6様、ありがとうございます。元データフレームの2つの行数の合計は、df1・df2で異なっており、おっしゃる例で言うと、df1が200行、df2が250行という意味です。
k_matsumot

2021/12/26 23:24

can110様、ありがとうございます。.concatで結合した直後にprint(len(df1), len(df2), len(df_inspect)) した結果、「123 325 448」と出力されました。
guest

回答1

0

  • 2つのデータフレームを2つのキーによりouterで結合しました。

結合方法が書かれていませんが、全体の文脈から考えてmergeかjoinを使って結合していると推定します。

その場合、結合した後のデータフレームの行数:448のように合計から減るのは当然です。以下をお読みください。

pandas.DataFrameを結合するmerge, join(列・インデックス基準

元の二つのDataFrameのそれぞれに'hoge1', 'hoge2'以外の列があるのであれば、重複しなかった列には必ずNaNが含まれます。
したがって、もともとのDataFrameにNaNがないならば、結合したDataFrameをdropnaすれば、重複していた列がわかるでしょう。dropnaの使い方は以下を読んでください。

pandasで欠損値NaNを除外(削除)・置換(穴埋め)・抽出

投稿2021/12/23 08:55

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問