将两列组合到pandas中的日期时间

时间:2014-05-02 06:39:37

标签: python datetime pandas

我有一个像这样的数据框

df.head(6):

year    qtr    measure
1990     3   1.813619
1990     4   1.809598
1991     1   1.814911
1991     2   1.808807
1991     3   1.820009
...

我怎么可能结合“年”'和' qtr'在熊猫中获取日期时间列?它可能只是本季度的结束日期。

感谢。

1 个答案:

答案 0 :(得分:3)

这是一个矢量化版本(只要你有numpy> = 1.7):

df['date'] = (np.array(df.year.astype(str),dtype='datetime64[Y]') 
              + np.array(df.qtr*3,dtype='timedelta64[M]')
              - np.timedelta64(1,'D'))

print df
   year  qtr   measure       date
0  1990    3  1.813619 1990-09-30
1  1990    4  1.809598 1990-12-31
2  1991    1  1.814911 1991-03-31
3  1991    2  1.808807 1991-06-30
4  1991    3  1.820009 1991-09-30

[5 rows x 4 columns]

编辑:添加说明

首先,我在年度专栏中创建一个datetime64 numpy数组:

print (np.array(df.year.astype(str),dtype='datetime64[Y]')

['1990' '1990' '1991' '1991' '1991']

这些是年级的datetime64 dtypes,所以如果我们在第一个日期添加一个月,它将是' 1990-01' + 1个月。因此,添加qtr * 3将创建一个YYYY-MM日期,该日期过了一个月:

print (np.array(df.year.astype(str),dtype='datetime64[Y]') 
       + np.array(df.qtr*3,dtype='timedelta64[M]'))

['1990-10' '1991-01' '1991-04' '1991-07' '1991-10']

因此,如果我从1990-10'中减去一天,我将到达上个月结束(这是你想要的月末):

print (np.array(df.year.astype(str),dtype='datetime64[Y]') 
      + np.array(df.qtr*3,dtype='timedelta64[M]')
      - np.timedelta64(1,'D'))

['1990-09-30' '1990-12-31' '1991-03-31' '1991-06-30' '1991-09-30']