从年份日期转换为年份季度

时间:2020-05-04 13:38:13

标签: python pandas

我有一列日期为'2000-01'格式的日期,我想将其相应地转换为'2000q1'。我的问题类似于this post,但是我不确定那里的频率函数是如何使用的。我已经编写了可以正常工作的代码,但是它并不健壮,而且肯定效率不高:

periods = ['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06']
lst = []
for quarter in periods:
    year, month = quarter.split('-')[0], quarter.split('-')[1]
    q1, q2, q3, q4 = ['01', '02', '03'], ['04', '05', '06'], ['07', '08', '09'], ['10', '11', '12']
    if month in q1:
        month = 'q1'
    if month in q2:
        month = 'q2'
    if month in q3:
        month = 'q3'
    if month in q4:
        month = 'q4'
    lst.append(year+month)

执行此操作的最佳方法是什么?干杯:)

2 个答案:

答案 0 :(得分:1)

您可以使用to_periods

periods = ['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06']

s = pd.to_datetime(periods, format='%Y-%m').to_period('Q')

输出:

PeriodIndex(['2000Q1', '2000Q1', '2000Q1', '2000Q2', '2000Q2', '2000Q2'], dtype='period[Q-DEC]', freq='Q-DEC')

答案 1 :(得分:1)

使用PeriodIndex

per = pd.PeriodIndex(periods, freq='Q')
print (per)
PeriodIndex(['2000Q1', '2000Q1', '2000Q1', '2000Q2', '2000Q2', '2000Q2'],
             dtype='period[Q-DEC]', freq='Q-DEC')

如果需要小写的q,请添加PeriodIndex.strftime

per = pd.PeriodIndex(periods, freq='Q').strftime('%Yq%q')
print (per)
Index(['2000q1', '2000q1', '2000q1', '2000q2', '2000q2', '2000q2'], dtype='object')