我有一个pandas数据框,其中索引是按日期字符串(例如20161122)。
我编写了一个基本的转换器,将这些字符串转换为日期时间对象,然后是一周的数字和年份。我想创建一些新的列,这些列是周数和年份。要做到这一点,我需要在切片时引用索引值 - 我已尝试过以下两种方法,但它们不起作用(抛出异常)。
如何创建包含从索引派生的值的新列?
注意: GetStats会返回我们正在操作的pandas数据帧。
stats = sf.GetStats(p, start_range, end_range)
def Index2Date__Test(i):
dte = '2016092508'
return parse(dte[:-2]).date()
方法1:
stats['year'], stats['week'] = bt_utils.WeekFromDate(Index2Date__Test(stats['index']))
方法2:
stats['year'], stats['week'] = bt_utils.WeekFromDate(Index2Date__Test(stats.index))
提前致谢!
本
答案 0 :(得分:4)
我 强烈 建议您将字符串表示转换为时间戳。让您的生活更轻松,然后您可以分配如下的便利。考虑数据框stats
stats = pd.DataFrame(index=np.arange(20110301, 20110311).astype(str))
# pd.to_datetime can take a format parameter that defines what to expect
stats['date'] = pd.to_datetime(stats.index, format='%Y%m%d')
# dt accessor allows you to access many convenient datetime functions
# available to columns of dtype datetime
stats['week'] = stats.date.dt.week
stats['year'] = stats.date.dt.year
print(stats)
date week year
20110301 2011-03-01 9 2011
20110302 2011-03-02 9 2011
20110303 2011-03-03 9 2011
20110304 2011-03-04 9 2011
20110305 2011-03-05 9 2011
20110306 2011-03-06 9 2011
20110307 2011-03-07 10 2011
20110308 2011-03-08 10 2011
20110309 2011-03-09 10 2011
20110310 2011-03-10 10 2011