Pandas Dataframe - 在切片/过滤时使用索引作为值

时间:2017-01-10 21:29:07

标签: pandas dataframe

我有一个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))

提前致谢!

1 个答案:

答案 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
相关问题