将函数应用于Pandas数据框的部分列

5

我有一个看起来像这样的数据框:

Date        Last
2016-11-03  101.58  
2016-11-04  100.50  
2016-11-07  103.55  
2016-11-08  104.63  
2016-11-09  106.15  
2016-11-10  107.65  
2016-11-11  106.74  
2016-11-14  108.22  
2016-11-15  107.92  
2016-11-16  106.03  

和一个简单的函数:

def new_def(x):
    add=70.00
    return x[0]+add

我想使用该函数向数据框添加另一列,但我只想将其应用于“2016-11-09”之前的日期。我尝试使用以下代码:

df['New']= df[:'2016-11-09'].apply(new_def, axis=1)

生成的列在'2016-11-09'之前正确,之后为NaN。 有关如何在'2016-11-09'之前返回'x [0] + add'和在之后返回'x [0]'的建议吗?

提前致谢。


1
你的日期是一列还是索引?看起来它是索引。 - EdChum
抱歉,我应该表述得更清楚,是的,日期是索引。 - dsugasa
2个回答

1
你可以重写new_def函数来接受一个日期参数:
def new_def(val, date):
    return val+70.0 if date < pd.datetime(2016, 11, 9) else val

然后像这样应用它:

df.apply(lambda r: newdef(r['Last'], r.name), 1)

是的,会的。我已经编辑了上面的示例,从索引中提取日期,而不是列。 - jboy

0
df["test"]=df.apply(lambda r: r["Last"]+70.0 if pd.datetime.strptime(r.name, "%Y-%m-%d") < pd.datetime(2016, 11, 9) else r["Last"], 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接