2017-02-24 8 views
-1

私はPandasが新しく、同様の列を持つ2つのデータセットを結合したいと思います。列には、多くの同一の値に加えて、他の列と比較してそれぞれ固有の値があります。各列にはいくつか重複して保管しておきたいものがあります。私の希望する出力は以下の通りです。 how = 'inner'または 'outer'を追加しても目的の結果が得られません。Pandas mergeは不要な重複エントリを作成します

import pandas as pd 

dict1 = {'A':[2,2,3,4,5]} 
dict2 = {'A':[2,2,3,4,5]} 

df1 = pd.DataFrame(dict1) 
df2 = pd.DataFrame(dict2) 

print(pd.merge(df1,df2)) 

output: 
    A 
0 2 
1 2 
2 2 
3 2 
4 3 
5 4 
6 5 

desired/expected output: 
    A 
0 2 
1 2 
2 3 
3 4 
4 5 

私が希望の出力をマージを使用して達成する方法を教えてください、ありがとうございます!

編集 これについて多くのコメントがあります。なぜ私がこの振る舞いについて混乱しているのかを明確にするために、単に別の列を追加すると4つの2を作るのではなく、2つしかないので、私の最初の例では2つの2を持つことを期待します。なぜ行動が変わるように見えるのですか、パンダは何をしていますか?

import pandas as pd 
dict1 = {'A':[2,2,3,4,5], 
     'B':['red','orange','yellow','green','blue'], 
     } 
dict2 = {'A':[2,2,3,4,5], 
     'B':['red','orange','yellow','green','blue'], 
     } 

df1 = pd.DataFrame(dict1) 
df2 = pd.DataFrame(dict2) 

print(pd.merge(df1,df2)) 

output: 
    A  B 
0 2  red 
1 2 orange 
2 3 yellow 
3 4 green 
4 5 blue 

However, based on the first example I would expect: 
    A  B 
0 2  red 
1 2 orange 
2 2  red 
3 2 orange 
4 3 yellow 
5 4 green 
6 5 blue 
+1

は、あなたがより少ないあいまいな例を追加してくださいでした、いくつかの異なるデータポイントを持って言いますか? – miradulo

+1

私は前に正確な問題に遭遇しました。この状況は、マージしようとしている列に重複がある場合に発生します。 – AsheKetchum

+0

私が提供した回答は、一時的なインデックスで回避するのに役立ちます。必要な出力が得られますが、必ずしも最も効率的な方法ではありません。 – AsheKetchum

答えて

1
import pandas as pd 

dict1 = {'A':[2,2,3,4,5]} 
dict2 = {'A':[2,2,3,4,5]} 

df1 = pd.DataFrame(dict1).reset_index() 
df2 = pd.DataFrame(dict2).reset_index() 

df = df1.merge(df2, on = 'A') 
df = pd.DataFrame(df[df.index_x==df.index_y]['A'], columns=['A']).reset_index(drop=True) 

print(df) 

出力:

A 
0 2 
1 2 
2 3 
3 4 
4 5 
0

df.drop_duplicates()を試しましたか?

import pandas as pd 

dict1 = {'A':[2,2,3,4,5]} 
dict2 = {'A':[2,2,3,4,5]} 

df1 = pd.DataFrame(dict1) 
df2 = pd.DataFrame(dict2) 

df=pd.merge(df1,df2) 
df_new=df.drop_duplicates() 
print df 
print df_new 

それはあなたが

+1

まだコメントする担当者がいないことは知っていますが、これは答えではありません。 – miradulo

+1

男に慈悲を持ってください – AsheKetchum

+1

@AsheKetchum "慈悲"アップ投票はおそらく健康ではありません。これは答えではありません。 – miradulo

0
dict1 = {'A':[2,2,3,4,5]} 
dict2 = {'A':[2,2,3,4,5]} 

df1 = pd.DataFrame(dict1) 
df1['index'] = [i for i in range(len(df1))] 
df2 = pd.DataFrame(dict2) 
df2['index'] = [i for i in range(len(df2))] 

df1.merge(df2).drop('index', 1, inplace = True) 

を望む結果のアイデアを与えることを思え一致指数に基づいて合併と同様に「A」列の値に一致することです。
以前は、マージの仕方がマッチに依存するため、df1の最初の2つがdf2の最初の2と2番目の2に一致し、df1の2番目の2が最初と2番目の2 df2も同様です。

これを試してみると、私が何を話しているのかが分かります。

dict1 = {'A':[2,2,3,4,5]} 
dict2 = {'A':[2,2,3,4,5]} 

df1 = pd.DataFrame(dict1) 
df1['index'] = [i for i in range(len(df1))] 
df2 = pd.DataFrame(dict2) 
df2['index'] = [i for i in range(len(df2))] 

df1.merge(df2, on = 'A') 
関連する問題