2017-01-09 4 views
1

一致マージ私は、以下のいずれかに非常に密接に見て2つのデータフレームを持っている(ただし、結果に影響を与えてはならない追加の列があります)必要に応じて - 記号は、失われたデータパンダは:</p> <p><strong>編集</strong>:追加されました余分な変数DATAFRAME 2つの列とエラーが

dataframe1を意味

ProductID  Date   Booked Rate 

10    01/01/2017  10.0 
10    02/01/2017  0.3 
10    03/01/2017  70.4 
20    01/01/2017  100.0 
20    02/01/2017  70.0 
20    03/01/2017  0.1 
-    04/01/2017  0.5 

dataframe2

ProductID  Date   Actual Rate 

10    01/01/2017  11.0 
10    02/01/2017  12.3 
10    03/01/2017  75.4 
20    01/01/2017  110.0 
20    02/01/2017  80.0 
30    03/01/2017  10.1 
-    04/01/2017  0.7 

は、理想的には結果がでなければなりませんデータフレーム3:

ProductID  Date   Booked Rate Actual Rate 

10   01/01/2017  10.0   11.0 
10   02/01/2017  0.3   12.3 
10   03/01/2017  70.4   75.4 
20   01/01/2017  100.0  110.0 
20   02/01/2017  70.0   80.0 
20   03/01/2017  0.1   - 
-    04/01/2017  0.5   - 

私は次のコードを使用して、私の本当のデータセットにマージを行います。

df3 = pd.merge(left=df1, right=df2, how="left", left_on=["ProductID", "Date"], right_on=["ProductID", "Date"]) 

私は(明確にするためommited)余分な列から数字として間違った結果を得ることが時々倍増している/三倍。

編集:これは、dataframe1の空のProductIDフィールドとdataframe2の空のproductIDが一致するためです。私はこれを外す必要があります。

本当に必要なのは、dataframe1のproductIdとDateに一致するものが見つかると、dataframe2の実際のレートが新しい列として追加される単純なマージです。 dataframe2の余分な項目は除外されるべきであり、dataframe1の中のどの項目も除外されるべきではありません。

また、右、内側、外側、マージを試しました。

結果は同じ正確な方法で(特定の広告申込情報を倍増または3倍に)常に歪ませるようです。

+0

は意図的な不正な日付はありますか? – piRSquared

+0

'-'は、文字列' '-''がないか、それと等しいことを意味しますか? – piRSquared

答えて

0

使用pd.merge

dataframe1.merge(dataframe2, on=['ProductID', 'Date'], how='left') 

    ProductID  Date Booked Rate Actual Rate 
0   10 01/01/2017   10.0   11.0 
1   10 02/01/2017   0.3   12.3 
2   10 03/01/2017   70.4   75.4 
3   20 01/01/2017  100.0  110.0 
4   20 02/01/2017   70.0   80.0 
5   20 03/01/2017   0.1   NaN 

あなたProductID列にNaNを持っている場合は

d1 = dataframe1.dropna(subset=['ProductID']) 
d2 = dataframe2.dropna(subset=['ProductID']) 

print(d1.merge(d2, on=['ProductID', 'Date'], how='left')) 

    ProductID  Date Booked Rate Actual Rate 
0  10 01/01/2017   10.0   11.0 
1  10 02/01/2017   0.3   12.3 
2  10 03/01/2017   70.4   75.4 
3  20 01/01/2017  100.0  110.0 
4  20 02/01/2017   70.0   80.0 
5  20 03/01/2017   0.1   NaN 
+0

こんにちは@pirSquared私は余分な列(インプレッション)の1つは、493763131から561349264へのマージのタイプの後に同様に同様の方法を既に試みました。私は何らかの種類の変数があると思います。 –

+1

これは、あなたが試したことを私たちに示す理由と、問題を再現する例が重要な点です。そうであるように、あなたは簡単な質問をして、その質問に対する答えを受けました。答えが与えられた後、あなたは考慮すべき他のことがあることを思い出します。良いと完全な質問を求めることが時々困難であることを私は感謝します。しかし、あなたはこの経験から取り除き、将来的に必要なものをより明確に表現する方法を学ぶことができます。うまくいけば、それは私がそれを意味したので、有用です。関連情報を使用して質問を編集します。 – piRSquared

+0

こんにちは@pRSquared、あなたはまったく正しいです。私は情報を修正する、私は問題を発見したと思う、それは両方のデータフレームからプロダクトIDの情報が不足している場合、それは一致と見なされる –

関連する問題