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