2017-09-11 6 views
0

上の2つのデータフレームをマージカラム。私はこれを取得したいと思います:私はこのように作成した2つのデータフレームを持つ日時インデックスと列

  cat1 cat2 
2011-01-01 1 111 
2011-01-01 1 111 
2011-01-01 2 222 

私が使用してこれを取得しようとすると:

df3 = df1.merge(df2, how='inner', right_index=True, left_index=True, on='cat1') 

をしかし、代わりに私は、この取得しています:

  cat1 cat2 
2011-01-01 1 111 
2011-01-01 1 222 
2011-01-01 1 111 
2011-01-01 1 222 
2011-01-01 2 111 
2011-01-01 2 222 

を私は確信しています私は私の前で何かを見落としているが、私はそれを理解することはできない。

私は実際には上記のシナリオを単純化して解決したため、実際の問題を解決できませんでした。私の実際の問題では、私はより多くの日付を持っています。

  cat1 cat2 
2017-05-14 200 111 
2017-05-14 200 111 
2017-05-14 200 111 
2017-05-15 100 444 

ありがとう:DF3のために私はこれを取得することを期待、

date1 = pd.DatetimeIndex(['2017-05-14', '2017-05-14', '2017-05-14', '2017-05-15']) 
date2 = pd.DatetimeIndex(['2017-05-14', '2017-05-15', '2017-05-14', '2017-05-15']) 
df1 = pd.DataFrame({'cat1': ['200', '200', '200', '100']}, index = date1) 
df2 = pd.DataFrame({'cat1': ['200', '200', '100', '100'], 
        'cat2': ['111', '222', '333', '444']}, index = date2) 

df3 = df1.merge(df2, how='inner', left_index=True, right_index=True, on='cat1') 

print(df1) 
print(df2) 
print(df3) 

      cat1 
2017-05-14 200 
2017-05-14 200 
2017-05-14 200 
2017-05-15 100 
      cat1 cat2 
2017-05-14 200 111 
2017-05-15 200 222 
2017-05-14 100 333 
2017-05-15 100 444 
      cat1 cat2 
2017-05-14 200 111 
2017-05-14 200 222 
2017-05-14 200 111 
2017-05-14 200 222 
2017-05-14 200 111 
2017-05-14 200 222 
2017-05-15 100 333 
2017-05-15 100 444 

しかし:

より正確次は私の実際の問題を表して!

答えて

0

ほぼあります!

df3 = df1.merge(df2, how='inner', right_index=True, left_index=False, on='cat1') 

left_index kwarg :)一般的に

もっとあなたは2を混合せずに、インデックスまたは列に基づいて参加することができますので、あなたは、/インデックス設定をリセットする必要があるかもしれません。これは(今あなたは、単に両方の索引をドロップし、二つの異なるカラムに結合を実行している)一般的なケースのために働くべきである:

df3 = pd.merge(df1.reset_index(), df2.reset_index(), on=['index','cat1']).set_index('index') 

これは

df3 = df1.reset_index().merge(df2.reset_index(), on=['index','cat1']).set_index('index') 
+0

以前のソリューションに類似と同じ、ミリアンペアでありますこれは間違いなく私が掲示した問題のために働く。ありがとうございました!残念ながら、私が投稿したものは単純化されたものでした。私はポストを少し編集して、私が何を意味するのかを示しています。別の質問をするべきかどうかは分かりませんが、それは非常に似ています。私はそれを動作させるためにすべてを試したような気がする! – RylonMcnz

+0

インデックス(マルチインデックスのデータフレーム)に 'cat1'を入れるべきでしょう。ユーザーはdf1.reset_index()。set_index(['index'、 'cat1'])などのようにすることができます。これはうまくいくはずです:) 編集:いいえ、おそらくうまくいかないでしょう。私は何かを試してみます – pazqo

+0

多くの感謝!ですから、本質的に私がここから集めるのは、カラムとインデックスをマージしたいのであれば、インデックスをカラムにするだけです。 – RylonMcnz

関連する問題