““时间戳记”对象不支持索引”,“发生在索引0”)

时间:2018-11-21 12:09:55

标签: python python-3.x pandas

我正在尝试处理一个数据帧,在该数据帧中我必须创建一个新列,以填充xnpv函数给出的结果

def xnpv(rate, values, dates):

    if rate <= -1.0:
        return float('inf')
    d0 = dates[0]    # or min(dates)
    return sum([ vi / (1.0 + rate)**((di - d0).days / 365.0) for vi, di in zip(values, dates)])

F['newcolumn'] = F.apply(lambda x: xnpv(0.1, x['Cash'], x['Date']), axis=1)

当我执行上面的代码时,它给我以下错误:TypeError :(“'Timestamp'对象不支持索引”,“发生在索引0”) 请帮我解决这个问题

当我使用以下表达式

F['newcolumn'] = F.groupby('Name').apply(lambda x: xnpv(0.1, x['Cash'], x['Date']))

它给了我另一个错误:KeyError:0

example

1 个答案:

答案 0 :(得分:0)

我认为问题正在逐步发生

d0 = dates[0] 

dates将是一个时间序列。我认为您假设这将是完整的“日期”列。当您在熊猫系列上发声时,apply(lambda x: f(x) axis=1) x是行而不是列。因此x["date"]将是一个时间戳,而不是您期望的一系列。

编辑:也许一个靠养育而不是依靠.apply()的人会更好?

def xnpv(rate, values, dates):
    return  values / (1.0 + rate) ** ((dates - dates.min()).dt.days / 365.0)
F['newcolumn'] = xnpv(0.1, F['Cash'], F['Date'])

编辑2:这似乎对我有用。是否符合您的期望?

F = pd.DataFrame({"name":['a','a','a','a','b','b','b','b'],
              "cash":[1,1,3,4,1,2,4,5],
              "date":['2017-01-01','2017-02-01','2017-03-01','2017-04-01',
                     '2017-01-01','2017-02-01','2017-03-01','2017-04-01']
             })
F["date"] = pd.to_datetime(F["date"])

def xnpv(rate, values, dates):
    return  sum(values / (1.0 + rate) ** ((dates - dates.min()).dt.days / 365.0))
F.groupby('name').apply(lambda x: xnpv(0.1, x['cash'], x['date']))