如何在python中为特定日期指定索引值?

时间:2018-10-07 09:37:39

标签: python pandas datetime series

我想为固定日期中的python中的日期分配索引。例如,索引1到20130101,索引2到20130102,依此类推,直到20181231。这些日期在python数据框中。索引可能会在数据框中的日期被覆盖。有人可以建议如何做到吗?

3 个答案:

答案 0 :(得分:2)

您可以减去date个对象。这样就可以很容易地将timedelta转换为天数。根据您的解释,这听起来像您要找的东西:

>>> (datetime.date(2013, 1, 2)-datetime.date(2013, 1, 1)).days
1
>>> (datetime.date(2013, 1, 31)-datetime.date(2013, 1, 1)).days
30

在这里,右侧参数是您锚定的固定日期。

答案 1 :(得分:1)

您可以在字典理解中使用pandas.date_range来创建具有所需索引和值的pandas.Series对象:

start_date = '20130101'
end_date = '20181231'

date_idx = pd.Series({d:i+1 for i, d in enumerate(pd.date_range(start_date, end_date, freq='D'))})

外观如下:

2013-01-01       1
2013-01-02       2
2013-01-03       3
2013-01-04       4
2013-01-05       5
2013-01-06       6
...
2018-12-26    2186
2018-12-27    2187
2018-12-28    2188
2018-12-29    2189
2018-12-30    2190
2018-12-31    2191

然后可以使用Series.map将其映射到datetime中的任何pandas.DataFrame列。例如:

df['date_idx'] = df['date_column'].map(date_idx)

答案 2 :(得分:1)

此处不需要显式循环。您可以使用pd.Series.dt.days

df = pd.DataFrame({'dates': pd.date_range('2013-01-01', '2018-12-31', freq='D')})

df['index'] = (df['dates'] - df['dates'].iat[0]).dt.days + 1

print(df)

          dates  index
0    2013-01-01      1
1    2013-01-02      2
2    2013-01-03      3
3    2013-01-04      4
4    2013-01-05      5
...         ...    ...
2186 2018-12-27   2187
2187 2018-12-28   2188
2188 2018-12-29   2189
2189 2018-12-30   2190
2190 2018-12-31   2191