2016-10-20 3 views
1

DF1がパンダから生じる値は、

|Invoice # |Date  |Amount  
|12   |12/15/2015 |$10 
|13   |12/16/2015 |$11 
|14   |12/17/2015 |$12 

DF2

|Invoice # |Date  |Amount 
|12   |1/16/2016 |$10 
|14   |1/17/2016 |$12 

マージ= df1.merge(DF2、どのよう=左、=インボイス番号に)

|Invoice # |Date   |Amount 
|12   |12/15/2015 |$10 
|NaN  |NaN   |NaN 
|14   |1/17/2016 |$12 
をマージ欠落交換します

私がしたいことは、マージでNaNの値を返したInvoice 13を取得し、それをリストに配置することです。何か案は?

+0

あなたは、このようにマージしているかどうか、あるいはdf1とdf2の間で共有されていない請求書の一覧がほしいと思いませんか? – szeitlin

+1

私はちょうどdf1ではなくdf2である請求書のリストがほしいです。ありがとう! – sschade

答えて

1

マージされた結果に、実際に左マージで何が起こっているか表示されていませんか?ここで

は、私は私はあなたが(私はパンダのバージョン0.19.0を使用しています)やろうとしていると思うものを再現しようとしたとき、私は何を得るのです。

merged = df1.merge(df2, how='left', on='Invoice #') 

merged

その後、あなたはマスクすることができ

merged[merged['Amount_y'].isnull()] 

masked

0123:および欠損値でそれらの行を含むデータフレームを取得しますそれらを一覧表示することにより、1つ以上の列に

merged['missing_from_df2'] = merged['Amount_y'].isnull() 

、他のデータフレームのように扱う、マスクされたデータフレームから物事を選択するには、インデックス(もしあなたが望むことに注意してください:

それとも、ブールフラグで列を作成複数の場合は、二重括弧を使用する必要があります)。

select_columns

あなたは、あなたがそれを他のことをしたい場合は、構文を簡単にするために、新しい変数に保存することができます。

masked_selection

+1

これは機能しました。どうもありがとうございます! – sschade

+0

とにかく、請求書番号と請求書日付を合わせて対応する請求書番号と請求書日付を取得できますか。 – sschade

+0

です。私はそれらを一緒にグループ化しておきたいと思います。 – sschade

0

方法1
pd.concat + drop_duplicates

pd.concat([df1, df2]).drop_duplicates(subset=['Invoice #']) 

方法2

combine_first
df1.set_index('Invoice #').combine_first(df2.set_index('Invoice #')).reset_index() 

方法3
merge

df1.merge(df2, on='Invoice #', suffixes=['', '_'], how='left')[df1.columns] 

方法4
join

df1.join(df2.set_index('Invoice #'), on='Invoice #', rsuffix='_')[df1.columns] 

すべて
pd.concat + drop_duplicates最速

01タイミング

enter image description here


製造します

関連する問題