我有一个包含月份和年份的DataFrame:
df:
month year
0 Jan 2012.0
1 Feb 2012.0
2 Mar 2012.0
3 Apr 2012.0
4 May 2012.0
5 Jun 2012.0
6 Jul 2012.0
7 Aug 2012.0
8 Sep 2012.0
9 Oct 2012.0
10 Nov 2012.0
11 Dec 2012.0
我想添加另一列来确定每年从3月开始的业务年度,如下所示:。
df:
month year business_year
0 Jan 2012.0 2011
1 Feb 2012.0 2011
2 Mar 2012.0 2012
3 Apr 2012.0 2012
4 May 2012.0 2012
5 Jun 2012.0 2012
6 Jul 2012.0 2012
7 Aug 2012.0 2012
8 Sep 2012.0 2012
9 Oct 2012.0 2012
10 Nov 2012.0 2012
11 Dec 2012.0 2012
12 Jan 2013.0 2012
13 Feb 2013.0 2012
答案 0 :(得分:4)
假设您的月份是一个字符串,则可以使用以下代码段:
df['business_year'] = df['year'] + df['month'].apply(lambda x: -1 if x in ('Jan', 'Feb') else 0)
或者,如果您想要更高性能的产品:
df['business_year'] = df['year'] + ~df1['month'].isin(('Jan', 'Feb')) - 1
答案 1 :(得分:2)
IIUC,使用pd.to_datetime
转换为datetime
。然后,您可以从每个日期减去2个月,然后返回结果的相应年份。
import calendar
mapping = {calendar.month_abbr[i]: i for i in range(13)}
df['month'] = df['month'].map(mapping)
(pd.to_datetime(df.assign(day=1)) - pd.offsets.MonthBegin(2)).dt.year
0 2011
1 2011
2 2012
3 2012
4 2012
5 2012
6 2012
7 2012
8 2012
9 2012
10 2012
11 2012
dtype: int64