Python 将函数仅应用于数据帧列的一部分
我有一个如下所示的数据帧:Python 将函数仅应用于数据帧列的一部分,python,pandas,Python,Pandas,我有一个如下所示的数据帧: 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 df.apply
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
df.apply(lambda r: newdef(r['Last'], r.name), 1)
还有一个简单的函数:
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]+添加”以及在“2016-11-09”之后返回“x[0]”有何建议
提前感谢您可以重写
新的_def
函数以获取日期参数:
def new_def(val, date):
return val+70.0 if date < pd.datetime(2016, 11, 9) else val
df[“test”]=df.apply(lambda r:r[“Last”]+70.0如果pd.datetime.strtime(r.name,“%Y-%m-%d”)
你的日期是列还是索引,看起来是索引?或者我应该更清楚,是的,日期是索引,它会的。我编辑了上面的示例以从索引中提取日期,而不是从列中提取日期。
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)