2016-06-18 8 views
1

私は以下のデータフレームに2つのシリーズを持っています。最初の文字列は2番目に表示される文字列で、これはURL文字列になります。私がしたいのは、余分な文字を連結して最初のシリーズを変更し、その変更を2番目の文字列に適用することです。パンダの分割と参加シリーズ

import pandas as pd 
#import urlparse 

d = {'OrigWord' : ['bunny', 'bear', 'bull'], 'WordinUrl' : ['http://www.animal.com/bunny/ear.html', 'http://www.animal.com/bear/ear.html', 'http://www.animal.com/bull/ear.html'] } 

df = pd.DataFrame(d) 

def trial(source_col, dest_col): 
    splitter = dest_col.str.split(str(source_col)) 
    print type(splitter) 
    print splitter 
    res = 'angry_' + str(source_col).join(splitter) 
    return res 

df['Final'] = df.applymap(trial(df.OrigWord, df.WordinUrl)) 

私はその後dest_col内の文字列にその変化をもたらす、dest_colにその文字列にsplit、その後、find the string from the source_colにしようとしています。ここで私はFinalと呼ばれる新しいシリーズとしてそれを持っていますが、私はむしろインプレースです。私は主な問題はsplitter変数であり、機能していないと考えています。ここで

は、結果がどのように見えるべきかです:

 OrigWord         WordinUrl 
    angry_bunny http://www.animal.com/angry_bunny/ear.html 
    angry_bear http://www.animal.com/angry_bear/ear.html 
    angry_bull http://www.animal.com/angry_bull/ear.html 

答えて

1

別のアプローチです:

df['WordinUrl'] = (df.apply(lambda x: x.WordinUrl.replace(x.OrigWord, 
                  'angry_' + x.OrigWord), axis=1)) 

In [25]: df 
Out[25]: 
    OrigWord         WordinUrl 
0 bunny http://www.animal.com/angry_bunny/ear.html 
1  bear http://www.animal.com/angry_bear/ear.html 
2  bull http://www.animal.com/angry_bull/ear.html 
+0

これはインプレースと関数を作成する必要がないため、ラムダを使用するだけで最高の答えです。ありがとう – noblerthanoedipus

2

を本当に同じ行の複数の列に適用するように設計されていません適用されます。あなたができることは、あなたの関数を変更して、代わりにシリーズを取り込み、そのシリーズの適切な値にsource_col、dest_colを代入することです。それを行う1つの方法は以下の通りです:

def trial(x): 
    source_col = x["OrigWord"] 
    dest_col = x['WordinUrl' ] 
    splitter = str(dest_col).split(str(source_col)) 
    res = splitter[0] + 'angry_' + source_col + splitter[1] 
    return res 


df['Final'] = df.apply(trial,axis = 1) 
1

代わりsplitを使用して、あなたは、対応するソースにangry_を付加するreplaceメソッドを使用することができます:ここ

def trial(row): 
    row.WordinUrl = row.WordinUrl.replace(row.OrigWord, "angry_" + row.OrigWord) 
    row.OrigWord = "angry_" + row.OrigWord 
    return row 

df.apply(trial, axis = 1) 

    OrigWord WordinUrl 
0 angry_bunny http://www.animal.com/angry_bunny/ear.html 
1 angry_bear http://www.animal.com/angry_bear/ear.html 
2 angry_bull http://www.animal.com/angry_bull/ear.html 
関連する問題