2017-08-02 1 views
1

私はデータフレームdf1のうちの1つが「値」であることを持っています。私は2つの列「0」と「1」を含む別のデータフレームDF2を持って右のマッピングで列を作成します

values 
['acd3f','rt5gh8','5ty7e'] 
['rt5gh8','t67ui'] 

のような値で、 - - 私は新しい列を追加するためにDF1を変更したい

0   1 
acd3f I am cool 
rt5gh8 I am not cool 
5ty7e ok_sir 
t67ui no_sir 

」のように見えます

df1['value_names'] = df1['values'].replace(df2.set_index('0')['1'].dropna()) 
- 私は以下のコードをしようとしています

values      value_names 
['acd3f','rt5gh8','5ty7e'] ['I am cool','I am not cool','ok_sir'] 
['rt5gh8','t67ui']   ['I am not cool','no_sir'] 

- のようになりますvalue_names」、

これは動作するように見えると私にエラーを与えていない -

KeyError: '1' 

注:
基本的には、私が代わりにDF2の前に持っていたことはマッピングでリストしました。私はそれをデータフレームdf2に変換し、df2のこれらの列名 "0"と "1"が自動的に割り当てられます。

+1

"1"ではなく、 "1" ... –

+0

基本的には、df2の代わりに以前はマッピングのあるリストがありました。私はそれをデータフレームdf2に変換し、これらの列名は自動的に割り当てられます。 – ComplexData

答えて

2

df2(コラム0から自分のマップされた値にキーの辞書(mapping)を作成しますが、それに対応する値であり、キーとColumn 1ある。

は、その後値を検索し、それを追加するために、ネストされたリスト内包を使用しました assignを使用して df1にアレキサンダーのコードの

df1 = pd.DataFrame({'values': [['acd3f','rt5gh8','5ty7e'], ['rt5gh8','t67ui']]}) 

df2 = pd.DataFrame({0: ['acd3f', 'rt5gh8', '5ty7e', 't67ui'], 
        1: ["I am cool", "I am not cool", "ok_sir", "no_sir"]}) 

mapping = {k: v for k, v in zip(df2[0], df2[1])} 

>>> df1.assign(value_names=[[mapping.get(val) for val in sublist] 
          for sublist in df1['values'] ]) 
        values       value_names 
0 [acd3f, rt5gh8, 5ty7e] [I am cool, I am not cool, ok_sir] 
1   [rt5gh8, t67ui]    [I am not cool, no_sir] 
+0

@cᴏʟᴅsᴘᴇᴇᴅある人の単純化はもう一つの複雑さです...私はマッピング方法 '{k:vに対してk、vはzip(df2 [0]、df2 [1])}'を選択しました。キーに使用される列と値に使用される列があり、データフレームに列挙された2つ以上の列がある場合にも機能するためです。私はネストされたリストの理解を好みますが、あなたが提案する2番目の方法は同じようにうまくいくはずです。 – Alexander

1

簡単なバージョン(IMO):。

In [484]: mapping = dict(df2.values[:, :2]) 

In [485]: df1.assign(value_names=df1['values'].apply(lambda x: [mapping[k] for k in x])) 
Out[485]: 
        values       value_names 
0 [acd3f, rt5gh8, 5ty7e] [I am cool, I am not cool, ok_sir] 
1   [rt5gh8, t67ui]    [I am not cool, no_sir] 

df2.valuesを使用して取得した2D np配列からマッピングを作成できます。

df.assignを使用してvalue_namesリストを作成します。

関連する問題