I have a pd.DataFrame that looks like this:
In [119]: df1
Out[119]: 
        DATES
0  2014-01-01
1  2014-01-24
2  2014-03-11
3  2014-04-09
4  2014-04-21
5  2014-05-02
6  2014-05-13
7  2014-06-11
8  2014-06-21
9  2014-07-22
10 2014-08-04
In [120]: df1.dtypes
Out[120]: 
DATES    datetime64[ns]
dtype: object
and I want to calculate the quarter each one of the entries belongs to. What I've tried so far is:
df1['QUARTER'] = df1['DATES'].map(lambda x: '2014Q1' if (x.year == 2014 & (x.month == 1 | x.month == 2 | x.month == 3)) else np.nan)
and then I get:
In [124]: df1
Out[124]: 
        DATES  QUARTER
0  2014-01-01      NaN
1  2014-01-24      NaN
2  2014-03-11      NaN
3  2014-04-09      NaN
4  2014-04-21      NaN
5  2014-05-02      NaN
6  2014-05-13      NaN
7  2014-06-11      NaN
8  2014-06-21      NaN
9  2014-07-22      NaN
10 2014-08-04      NaN
Finally, I've tried:
df1['QUARTER'] = df1['DATES'].map(lambda x: x.year + '-Q' + x.quarter)
and then I get an error:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Any ideas are appreciated, thanks!
In [30]: df['QUARTER'] = pd.PeriodIndex(df['DATES'], freq='Q')
In [31]: df
Out[31]: 
        DATES QUARTER
0  2014-01-01  2014Q1
1  2014-01-24  2014Q1
2  2014-03-11  2014Q1
3  2014-04-09  2014Q2
4  2014-04-21  2014Q2
5  2014-05-02  2014Q2
6  2014-05-13  2014Q2
7  2014-06-11  2014Q2
8  2014-06-21  2014Q2
9  2014-07-22  2014Q3
10 2014-08-04  2014Q3
The values in df['QUARTER'] are Periods. If you'd like strings, then use 
df['QUARTER'] = pd.PeriodIndex(df['DATES'], freq='Q').format()
By the way, it is also possible to build the desired result by adding strings and string-valued Series:
In [59]: df['DATES'].dt.year.astype(str) + 'Q' + df['DATES'].dt.quarter.astype(str)
Out[59]: 
0     2014Q1
1     2014Q1
2     2014Q1
3     2014Q2
4     2014Q2
5     2014Q2
6     2014Q2
7     2014Q2
8     2014Q2
9     2014Q3
10    2014Q3
Name: DATES, dtype: object
That might be useful to you in the future, though in this case there is no need to get your hands dirty.
you can do using dt accessor :
df1['QUARTER'] = df1['DATES'].dt.quarter
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With