2

文字列内の共通のシーケンスに基づいて、2 つのデータ フレームを文字列と比較して結合したいと考えています。

データは次のようになります。

データ1:

Kansas
Sacramento
Miami
Toronto

データ2

Kansas_county
Sacramento_county
Miami_county
Vegas_county

望ましい結果は次のとおりです。

col_data1            col_data2
Kansas               Kansas_county   
Sacramento           Sacramento_county
Miami                Miami_county
Toronto              N/A
N/A                  Vegas_county

質問は:

  • 両方のソース データ セットで共通の文字列を検索するにはどうすればよいですか?
  • data1 の内容を取得して、文字列を含む data2 の対応する行を選択するにはどうすればよいですか?
  • これらはどのように結合できますか?

よろしくお願いします。

4

2 に答える 2

1

ローマンの答えに基づいて、データ列の1つをフォーマットする関数を定義できます。

In [105]: df1 = pd.DataFrame({'col':['Kansas', 'Sacramento', 'Miami', 'Toronto']})
In [106]: df2 = pd.DataFrame({'col':['Kansas_county', 'Sacramento_county', 'Miami_county', 'Vegas_county']})

In [107]: def f(x,delm='_'):
     ...      return x.split(delm)[0]

In [108]: df2['map_index'] = df2.col.map(lambda x: f(x))
In [109]: df2
Out[109]: 
                 col   map_index
0      Kansas_county      Kansas
1  Sacramento_county  Sacramento
2       Miami_county       Miami
3       Vegas_county       Vegas

In [110]: dfN = pd.merge(df1, df2, how='outer', left_on='col', right_on='map_index')

In [111]: dfN
Out[111]: 
        col_x              col_y   map_index
0      Kansas      Kansas_county      Kansas
1  Sacramento  Sacramento_county  Sacramento
2       Miami       Miami_county       Miami
3     Toronto                NaN         NaN
4         NaN       Vegas_county       Vegas

これは本質的に Roman が概説したのと同じことを行いますが、より一般的なフォーマット機能を提供します (関数に入れたいものは何でも、正規表現の解析などを含めることができます)。

于 2013-11-04T18:00:56.907 に答える
0

最初の DataFrame に新しい列を追加してから、pandas.merge()を使用できます。

>>> df1 = pd.DataFrame({'col':['Kansas', 'Sacramento', 'Miami', 'Toronto']})
>>> df2 = pd.DataFrame({'col':['Kansas_county', 'Sacramento_county', 'Miami_county', 'Vegas_county']})
>>>
>>> df1['county'] = df1['col'] + '_county'
>>>
>>> dfN = pd.merge(df1, df2, how='outer', left_on='county', right_on='col', suffixes=['_data1', '_data2'])
>>>
>>> del dfN['county']
>>> dfN
    col_data1          col_data2
0      Kansas      Kansas_county
1  Sacramento  Sacramento_county
2       Miami       Miami_county
3     Toronto                NaN
4         NaN       Vegas_county
于 2013-11-04T07:24:38.927 に答える