2017-02-01 5 views
0
df = pd.DataFrame(columns = ['Date','Data']) 
# input some random data into df 

test_log = pd.DataFrame(columns = ['Date','Data']) 

def test_func(date, data): 
    if data > 2: 
     data = data * 2 
     d = {'Date':date, 'data':data} 
     return d 


df.apply(lambda x: test_func(x['Date'],x['Data']), axis=1) 

まず、これは一連の辞書dを返しません。 applyで使用されている関数(test_func)が単一の値を返すと、applyメソッドから系列が返されますが、関数 'test_func'から辞書を返すと、df.applyメソッドはdfの値を戻り値に置き換えます。複数の引数を指定して新しいパンダデータフレームを作成する関数を適用する

私はそれが値を持つtest_logdtest_func

EDITによって辞書返され

test_log = test_log.append(d, ignore_index=True)

すなわち追加test_func返す何か、その後、df内のすべての行にtest_funcを実行したい:

次の場合、DataFrameを返します。

def test_func(date, data): 
    if data > 2: 
     data = data * 2 
     d = {'Date':date, 'data':data} 
     return pd.Series(d) 
+2

は[MCVE]を提供してください。 – MYGz

+0

これは、実際のコードの関数ははるかに複雑です。これは本質的に最も単純なプロセスです。 –

+0

再現性のある問題と最終的な結果が得られれば、迅速な解決策が得られます。そうでなければ、私たちは線の間を読んで、あなたが達成しようとしていることを見つけなければなりません。それは両当事者にとって時間の最大の利益ではありません。 – MYGz

答えて

0

あなたはapplyせずに同じことを達成することができます

>>> import pandas as pd 
>>> import numpy as np 
>>> df = pd.DataFrame() 
>>> df['Date'] = pd.date_range('01/01/2010', periods=5) 
>>> df['Data'] = np.arange(0,5,1) 
>>> df 
     Date Data 
0 2010-01-01  0 
1 2010-01-02  1 
2 2010-01-03  2 
3 2010-01-04  3 
4 2010-01-05  4 

>>> test_log = df.loc[df.Data > 2] 
>>> test_log.Data = test_log.Data * 2 
>>> test_log 
     Date Data 
3 2010-01-04  6 
4 2010-01-05  8 
+0

こんにちは私の機能はより複雑です私はここで詳細を再掲載しました、見てみましょうか? http://stackoverflow.com/questions/41984807/how-to-run-a-function-on-each-row-in-dataframe-and-append-the-result-to-a-new-da –

関連する問題