我有一个数据框如下
datadf = {'Date': ['2010-03-15', '2014-03-21','2019-02-26','2017-02-26'],
'Follow': ['3 years', '5 years','3 years','1 year']
}
df = pd.DataFrame (datadf)
我想创建一个新列,如果 Follow= 3 年,则在新列中的日期列中的日期中添加 3 年。如果是 5 年,则同样适用,然后再加上 5 年,依此类推。
我可以针对单个条件执行此操作,如下所示:
df["DateUpdate"] = df.apply(lambda x: x['Date'] + pd.offsets.DateOffset(years=53)
if '3 years' in x['Follow'] else x['Date'],
axis=1)
但是如何扩展所有条件?
假设Follow
是格式n years
或n year
df = pd.DataFrame({'Date': ['2010-03-15', '2014-03-21','2019-02-26','2017-02-26'],
'Follow': ['3 years', '5 years','3 years','1 year']
})
df['Date'] = pd.to_datetime(df['Date'])
df['DateUpdate'] = df.apply(lambda r:
r['Date']+pd.offsets.DateOffset(
years=float(r["Follow"].split()[0])), axis=1)
print (df)
输出:
Date Follow DateUpdate
0 2010-03-15 3 years 2013-03-15
1 2014-03-21 5 years 2019-03-21
2 2019-02-26 3 years 2022-02-26
3 2017-02-26 1 year 2018-02-26
归纳其工作确定所有offsets
受支持的DateOffset
,但假设的格式Follow
是n offsetstring
或Not available
。
def do_offset(row):
date, follow = row['Date'], row['Follow']
allowed_offsets = [ "years", "months", "weeks", "days",
"hours", "minutes", "seconds", "microseconds"]
if follow != "Not available":
n, offset = follow.lower().split()
# For year, month, ...
offset = offset+"s" if offset[-1] != "s" else offset
if offset in allowed_offsets:
date = date+pd.offsets.DateOffset(**{offset:float(n)})
return date
df = pd.DataFrame({'Date': ['2010-03-15']*10,
'Follow': ['1 year', '3 years', '3 months', '3 weeks',
'3 days', '3 hours', '3 minutes', '3 seconds',
'3 microseconds', 'Not available']
})
df['Date'] = pd.to_datetime(df['Date'])
df['DateUpdate'] = df.apply(do_offset, axis=1)
print (df)
输出:
Date Follow DateUpdate
0 2010-03-15 1 year 2011-03-15 00:00:00.000000
1 2010-03-15 3 years 2013-03-15 00:00:00.000000
2 2010-03-15 3 months 2010-06-15 00:00:00.000000
3 2010-03-15 3 weeks 2010-04-05 00:00:00.000000
4 2010-03-15 3 days 2010-03-18 00:00:00.000000
5 2010-03-15 3 hours 2010-03-15 03:00:00.000000
6 2010-03-15 3 minutes 2010-03-15 00:03:00.000000
7 2010-03-15 3 seconds 2010-03-15 00:00:03.000000
8 2010-03-15 3 microseconds 2010-03-15 00:00:00.000003
9 2010-03-15 Not available 2010-03-15 00:00:00.000000
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句