我有一个Dataframe,列中包含以下列:
df['Schedule'] =
...
2012-12-31
2013-01-01
2013-01-02
2013-01-03
2013-01-04
2013-01-05
2013-01-06
2013-01-07
2013-01-08
2013-01-09
从1981年到2015年等等。该列的元素是pandas.tslib.Timestamp。
我需要创建另一个列,我只需要提取年份。
所以我做了以下命令:
df['Year'] = df['Schedule'].dt.year
部分奏效,因为我需要多年来与日历年的日期相匹配(我的数据集由NBA赛季的比赛组成)/ 要明确而不是:
2012-12-31 2012
2013-01-01 2013
我需要:
2012-12-31 2013
2013-01-01 2013
...
2013-09-27 2014
...
2014-04-06 2014
有没有人有办法解决这个问题?
答案 0 :(得分:1)
从你所说的话看,九月似乎是NBA赛季的断点。如果是这样,您最好的选择是apply
自定义lambda
,就像这样:
df["year"] = df["schedule"].apply (lambda x : x.year if x.month < 9 else x.year + 1)
如果你给我更多关于NBA赛季的信息,我可以清理它。
这是一个测试程序,可为您的样本提供正确的输出:
import dateutil
df = DataFrame ({
"schedule" :
Series ([
"2012-12-31",
"2013-01-01",
"2013-09-27",
"2014-04-06"
]).apply(dateutil.parser.parse)
})
df["year"] = df["schedule"].apply (lambda x : x.year if x.month < 9 else x.year + 1)
df
Here是pandas文档首次使用lambda
apply
函数开始介绍的地方之一。