2017-06-11 8 views
1

2つのデータフレーム(customerId、フルネーム、電子メール)と列(customerId、amount、およびdate)を持つデータフレームをマージしようとしています。最初のデータフレームをメインのデータフレームにし、他のデータフレーム情報を含めたいのですが、それはcustomerIdsが一致する場合のみです。私がやってみました:リピートパンダなしで2つのデータフレームをマージする

merge = pd.merge(df, df2, on='customerId', how='left') 

が、生成されたデータフレームは、繰り返しの多くが含まれており、間違ったになります。これは正しいかもカント

customerId full name emails amount date 
0 002963338 Star shine [email protected] $2,910.94 2016-06-14 
1 002963338 Star shine [email protected] $9,067.70 2016-05-27 
2 002963338 Star shine [email protected] $6,507.24 2016-04-12 
3 002963338 Star shine [email protected] $1,457.99 2016-02-24 
4 986423367 palm tree [email protected],[email protected] $4,604.83 2016-07-16 

、助けてください!

答えて

3

customerIdの列に重複があります。

だから、解決策はそれらを削除します。 drop_duplicatesによって:

df2 = df2.drop_duplicates('customerId') 

サンプル:私は、行全体として繰り返し表示されませんが、repetetionsははcustomerIdである

df = pd.DataFrame({'customerId':[1,2,1,1,2], 'full name':list('abcde')}) 
print (df) 
    customerId full name 
0   1   a 
1   2   b 
2   1   c 
3   1   d 
4   2   e 

df2 = pd.DataFrame({'customerId':[1,2,1,2,1,1], 'full name':list('ABCDEF')}) 
print (df2) 
    customerId full name 
0   1   A 
1   2   B 
2   1   C 
3   2   D 
4   1   E 
5   1   F 

merge = pd.merge(df, df2, on='customerId', how='left') 
print (merge) 
    customerId full name_x full name_y 
0   1   a   A 
1   1   a   C 
2   1   a   E 
3   1   a   F 
4   2   b   B 
5   2   b   D 
6   1   c   A 
7   1   c   C 
8   1   c   E 
9   1   c   F 
10   1   d   A 
11   1   d   C 
12   1   d   E 
13   1   d   F 
14   2   e   B 
15   2   e   D 

df2 = df2.drop_duplicates('customerId') 
merge = pd.merge(df, df2, on='customerId', how='left') 
print (merge) 
    customerId full name_x full name_y 
0   1   a   A 
1   2   b   B 
2   1   c   A 
3   1   d   A 
4   2   e   B 
0

df.drop_duplicates('customerId', inplace = 1) 

ここで、dfは、量または取得されたポストマージに対応するデータフレームである可能性があります。少ない数の行(たとえばn)が必要な場合は、次を使用できます。

df.groupby('customerId).head(n) 
関連する問題