2016-06-23 11 views
0

データフレームdfaとdfbの間に一致する列/キーがある場合は常に、データフレームaの国名をデータフレームbの一致と変更します。1つのテーブル内の部分文字列を別のテーブルの文字列で置き換えて列全体を置換する

DFAデータ:


ボリビア
ボスニア



DFBデータ:(フル正しいデータ)

ISOの国
BOL「ボリビア、
BIHボスニア・ヘルツェゴビナの多民族国

まず、私は国に基づいてテーブルDFAとDFBをマージしようとした任意のその文字列は同じではなく、いくつかの未知のために基づいて、置換を行いますカンマで任意の文字列が

dfa.ix[dfa.Country=='Bolivia', 'Country'] = 'Bolivia, Plurinational State of' 

これは交換が起こることで動作するが、データは、この正確な文字列を含む第2のテーブルと比較されたとき、のように等しいそう見ていない、まだマッチングされていない理由テーブルをマージするときにnullを更新しないでください。

dfab_merge_null = dfab_merge.loc[dfab_merge['ISO'].isnull()] 
    dfab_merge_null.Country.unique() 

配列([「アゾレス諸島」、「ボリビア、多民族国」、「カナリアある」、 「イラン、イスラム共和国」、 「の韓国、民主主義人民共和国」、「韓国、 '、' Mossova '、' Moldova、Republic '、 'パレスチナ(ヨルダン川西岸) '、'セントキッツネヴィス 'など...、 'マケドニア旧ユーゴスラビア共和国 '、 'ミクロネシア連邦 '



dfaには、最終的に追加したいISO列が含まれていません。 dfbには、2つのテーブルの間でCountry内の緩やかに一致する文字列名に基づいて、dfaに転送しようとしているISOが含まれています。

他にどのような方法で更新しようとしているのですか?私は1日以上これに固執しており、何か助けに感謝します。 ありがとう! 2つのデータフレームが行賢明並んでいるか、それぞれがすでに正しい行が一致されることを保証するインデックスを持っている場合は

+0

上記のコードには、タイプミスが含まれています。 – maric

+0

dfa.ix [s1.Country == 'Bolivia'、 'C​​ountry'] = 'Bolivia、Plurinational State'はdfa.ix [dba.Country == 'Bolivia '、' Country '] =' Bolivia、Plurinational State of 'しかし、これは問題とは関係なく、これは原因ではない。 – maric

+0

コメントを追加するのではなく、質問を更新してください。 [this](http://stackoverflow.com/questions/13636848/is-it-possible-to-do-fuzzy-match-merge-with-python-pandas)をチェックするとよいでしょう。 – MaxU

答えて

0

、これは動作するはずです:

dfb.combine_first(dfa) 

それはつまり、並んでいない場合は「ボリビア」はdfaの行0と表示され、「ボリビア、多国籍の状態」はdfbの行11と表示されます。

関連する問題