如何在数据框上应用函数

时间:2017-08-14 13:33:12

标签: python pandas numpy dataframe lambda

我有一个示例数据框(df):

                               Time             Price
Equity(231 [IBM])   2016-05-10 00:00:00+00:00  150.04
Equity(2574 [TSLA]) 2016-04-29 00:00:00+00:00  248.43

我想使用dataframe中的值以及其他变量中的值对每行应用函数findy(),并将这些值存储在新列Predicted中。

我有这些变量(值从输出中复制):

high_1 = Equity(231 [IBM])      151.676
         Equity(2574 [TSLA])    258.310
         Equity(0 [AAPL])       111.710

idx_1 =  Equity(231 [IBM])     2016-04-18 00:00:00+00:00
         Equity(2574 [TSLA])   2016-04-18 00:00:00+00:00
         Equity(0 [AAPL])      2016-04-14 00:00:00+00:00

我想申请这个功能:

def findy(s,Time,Price,idx_1, high_1, idx_last):
    idx = [idx_1.loc[s.index], Time]
    x = matplotlib.dates.date2num(idx)
    y = [high_1.loc[s.index], Price]
    coefficients = np.polyfit(x, y, 1)
    polynomial = np.poly1d(coefficients)
    x_axis = np.linspace(x[0], idx_last + 1, 3)  # linspace(start, end, num)
    y_axis = polynomial(x_axis)
    return Predicted_Value

我尝试使用此代码:

df["Predicted"] = df.apply(lambda s: 
                          findy(s,s['Time'],s['Price'],idx_1,high_1,idx_last))

lambda函数中,我尝试获取每个股票的indexTimePrice并插入到函数中并将这些值用于内部操作findy()。 但是我得到了错误,KeyError: ('Time', 'occurred at index Time') 主要问题是坐在lambda内以及如何从行访问值。

如果您想要更多澄清,请随时提出。

1 个答案:

答案 0 :(得分:1)

问题出在您的findy功能中。第一行尝试idx_1.loc[s.index]s.index的值类似于Index(['Time', 'Price'], dtype='object')。然后它在idx_1的索引中寻找['时间','价格'],这是不存在的。

我认为你必须重新评估你的findy功能。即使第一行有效,您也可以转向并将结果传递给matplotlib.dates.date2num,这需要datetimedatetimes序列。这不会是idx包含的内容。