2016-03-30 1 views
3

私はPandasデータフレームの列全体に関数を適用したいと考えています。この関数は、その列に、現在のデータを上書きするが、説明するために、次のことに別の列の値が必要になります。Python Pandasの引数として別の列を取る列に関数を適用する

df[1] = df.apply(retrieve_original_string(df[0]), axis=1) 

col 0, col 1, 
23, 'word' 
45, 'word2' 
63, 'word3' 

私はパンダに番号欄に疲れて渡してきた方法を適用します

しかし、これはエラーをスローします:

sys:1: DtypeWarning: Columns (3,4) have mixed types. Specify dtype option on import or set low_memory=False. 
Traceback (most recent call last): 
    File "/home/noname365/similar_keywords_microsoft/similar_keywords.py", line 95, in <module> 
    merged_df[1] = merged_df.apply(retrieve_original_string(merged_df[0], match_df), axis=1) 
    File "/home/noname365/similar_keywords_microsoft/similar_keywords.py", line 12, in retrieve_original_string 
    row_num = int(row) 
    File "/home/noname365/virtualenvs/env35/lib/python3.5/site-packages/pandas/core/series.py", line 81, in wrapper 
    "cannot convert the series to {0}".format(str(converter))) 
TypeError: cannot convert the series to <class 'int'> 

エラーは、私が行単位で個別の機能に整数列を渡す代わりにしていないことを意味します。どうすればこれを達成できますか?

+0

をあなたはおそらく 'DF [1] = df.apply(ラムダ行をしたいです: retrieve_original_string(行[0])、軸= 1) ' – EdChum

答えて

2

IIUCあなたは第二のカラムを選択するためのiloc必要と述べたEdChumとしてlambdaを追加します。

def retrieve_original_string(x): 
    x = x + 4 
    #add code 
    return x 


df.iloc[:,1] = df.apply(lambda x: retrieve_original_string(x[0]), axis=1) 
print df 
    col 0 col 1 
0  23  27 
1  45  49 
2  63  67 

#if you need new column 
df['a'] = df.apply(lambda x: retrieve_original_string(x[0]), axis=1) 
print df 
    col 0 col 1 a 
0  23 'word' 27 
1  45 'word2' 49 
2  63 'word3' 67 

または:

def retrieve_original_string(x): 
    x = x + 4 
    #add code 
    return x 


df.iloc[:,1] = df.iloc[:,0].apply(retrieve_original_string) 
print df 
    col 0 col 1 
0  23  27 
1  45  49 
2  63  67 
関連する問題