我有一个像这样的数据框
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'在熊猫中获取日期时间列?它可能只是本季度的结束日期。
感谢。
答案 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']