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
。当test_func
中使用的函数(apply
)返回单个值时,将从apply方法返回一个系列,但是当您从函数'test_func'返回一个字典时,df.apply方法将替换带有返回值的df值。
我想在test_func
的每一行上运行df
,然后当test_func
返回某些内容时test_log
附加值{<1}}
test_log = test_log.append(d, ignore_index=True)
其中d
是test_func
编辑:
执行以下操作时返回DataFrame:
def test_func(date, data):
if data > 2:
data = data * 2
d = {'Date':date, 'data':data}
return pd.Series(d)
答案 0 :(得分: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