我想避免Python pandas中的for循环,但由于缺乏曝光,我没有这样做。我希望通过向其添加一些信息来基于现有列派生新列。
我的情景:
for each in data['days']:
if each<100000:
clsdate.append(datetime.now()+ relativedelta(days=each))
else:
clsdate.append(datetime.now())
data['clsdate'] = clsdate
data ['days']包含一个int号。在这里,我正在迭代整个列并进行求和
今天的日期+天数=截止日期
并将值附加到列表中。然后根据if条件(即值的范围)将列表添加到数据帧中。
如何避免这种循环并一次性添加。
答案 0 :(得分:3)
您可以使用pandas的日期时间函数:
df = pd.DataFrame()
df['days'] = [1, 3, 2, 4]
pd.to_datetime('now') + pd.to_timedelta(df['days'], unit='days')
Out:
0 2016-08-09 07:25:22
1 2016-08-11 07:25:22
2 2016-08-10 07:25:22
3 2016-08-12 07:25:22
Name: days, dtype: datetime64[ns]
答案 1 :(得分:0)
您可以使用Series.apply
:
data['clsdate'] = data['days'].apply(lambda x: datetime.now() + relativedelta(days=x))