2017-12-07 9 views
1
name value_1 
dd3 what, _ is 
dd4 what, _ is 

value_1列の '_'を名前列の文字列全体に置き換えるにはどうすればよいですか?列値の文字をPandasの別の列の文字列に置き換えます

私はこれを試してみました

value_1 
what, dd3 is 
what, dd4 is 

値_1列に

所望の出力:

df['value_1'] = df['value_1'].apply(lambda x:x.replace("_", df['name'])) 

そして私は、行によって、プロセスのためにaxis=1でこれerror :expected a string or other character buffer object

答えて

3

使用applyを得た:

df['value_1'] = df.apply(lambda x:x['value_1'].replace("_", x['name']), axis=1) 
print (df) 
    name  value_1 
0 dd3 what, dd3 is 
1 dd4 what, dd4 is 
2

UPDATE: @のjezraelのソリューションに似ていますが、それは大きなデータセット(ベクトル化アプローチ)のために少し速くする必要があります:

In [221]: df['value_1'] = (df.groupby('name')['value_1'] 
          .transform(lambda x: x.str.replace('_', x.name))) 

In [222]: df 
Out[222]: 
    name  value_1 
0 dd3 what, dd3 is 
1 dd4 what, dd4 is 

旧答え:

あなたはヘルパーDFを作成することができます:

In [181]: x = df.value_1.str.split('_', expand=True) 

In [192]: x 
Out[192]: 
     0 1 
0 what, is 
1 what, is 

はそれに新しい列を挿入します。

In [182]: x.insert(1, 'name', df['name']) 

得られます

In [194]: x 
Out[194]: 
     0 name 1 
0 what, dd3 is 
1 what, dd4 is 

と元の列に置き換えます。

In [183]: df['value_1'] = x.sum(1) 

In [184]: df 
Out[184]: 
    name  value_1 
0 dd3 what, dd3 is 
1 dd4 what, dd4 is 
関連する問題