应用具有多个参数的函数来创建新的pandas数据帧

时间:2017-02-01 06:58:52

标签: python pandas numpy dictionary

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)

其中dtest_func

返回的字典

编辑:

执行以下操作时返回DataFrame:

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

1 个答案:

答案 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