我有一个 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
有没有人有解决这个问题的有效方法?
最佳答案
从你所说的来看,9 月似乎是 NBA 赛季年度的转折点。如果是这样,您最好的选择是应用
自定义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
的地方之一。
关于python - Pandas :仅从日期时间列中提取日历年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36460886/