2016-11-24 51 views
2

我有一个数据帧,看起来像这样的部分:应用的功能,只大熊猫数据框列

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 

我想另一列添加到dataframe使用函数,但我只想将它应用于'2016-11-09'之前的日期。我试着这样做:

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

结果列是正确的达人“2016年11月9日”大和NaN之后。之后如何在'2016-11-09'和'x [0]'之前返回'x [0] +添加'的任何建议?

在此先感谢

+1

是您的日期一列或它是索引,它看起来像索引 – EdChum

+0

对不起,我应该更清楚,是的日期是索引 – dsugasa

回答

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) 
+0

谢谢,如果日期是索引将工作? – dsugasa

+0

是的,它会。我编辑了上面的例子来从索引中提取日期,而不是列。 – jboy

+0

谢谢你,让我发疯 – dsugasa

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)