2017-04-10 19 views
0

これを言うことから始めてみましょう。これが最善の方法であるかどうかは不明ですが、私の左のデータフレームと1つのインデックス値を含むパンダのデータフレームを作成するコードを書きました特定の空間条件が一致する私の正しいデータフレームから。これは基本的な空間結合ですが、いくつかの追加属性があります。インデックス値は正しいです。3パンダのデータフレームへの結合

私の問題は、この3番目のデータフレームと一緒に左右のデータフレームをどのように結合できますか?

私は、次の機能をサポートする必要があります。

  1. 私は(DF1とDF2の両方から)すべてを維持したい場合は、私はそれをどのように行うのですか?
  2. デフォルトでは、すべてのデータフレーム値を保持したいので、私の結合データフレームの値は次のようになります。[1, None]これは問題になりますか?

例:

join_df = pd.DataFrame(data=[[0, 2], [1, 3], [2, None]], columns=['left_idx', 'right_idx']) 
df1 = pd.DataFrame([["a", {5:5}], ["b", {4:5}], ["c", {12:5}]], columns=['A1', 'A2']) 
df2 = pd.DataFrame([["b", {'a':5}], ["bbb", {'b':5}], ["ccc", {'c':5}]], columns=['B1', 'B2']) 

そこでjoin_dfは次のように動作:

  1. join_dfのデータは、左データフレーム(DF1)およびDF2から参加する行のインデックスであります
  2. 結合は、多対多、1:m、または多対1のいずれでもかまいません。

目的は、df1のすべての行がdf2のすべての行と一致することです。オプションで、(ボーナス質問)、df1〜df2に一致がなければ、df1の記録を保持できますか? df2と同じですか?

あなたは

+0

出力データフレームをどのように見たいか考えていただけますか?あなたが望む結果が完全にはっきりしていない。 – ASGM

答えて

1

あなたはjoin_dfの左側の列とdf1またはdf2のインデックスにDataFrame.mergeと一致するものを使用することができますありがとうございました。 how='left'を使用すると、join_dfで指定された値のみが含まれるDataFrameが作成されます。

join_df = join_df.merge(df1, left_on='left_idx', right_index=True, how='left') 
join_df = join_df.merge(df2, left_on='right_idx', right_index=True, how='left') 

これは与える:

left_idx right_idx A1  A2 B1   B2 
0   0  2.0 a {5: 5} ccc {u'c': 5} 
1   1  3.0 b {4: 5} NaN  NaN 
2   2  NaN c {12: 5} NaN  NaN 

あなたはjoin_df[df1.columns | df2.columns]を指定することにより、idx列を除外することができます。値を落とさないようにするには、how='outer'を使用できますが、目的の出力に合わせて結果を調整する必要があります。

関連する問題