python - 将小时(00 到 23)添加到日期列

标签 python pandas time-series

我处理了一个数据集,并能够以这种方式重新排列它 ( pastebin )。

         date type  value location
0  2017-10-03    D   3035    INDIA
0  2017-10-03    D   3035    INDIA
0  2017-10-03    D   3035    INDIA
0  2017-10-03    D   3035    INDIA
0  2017-10-03    D   3035    INDIA
   ................................
   total 24 rows for D type and India
   ................................
1  2017-10-03    F   3035    INDIA
1  2017-10-03    F   3035    INDIA
1  2017-10-03    F   3035    INDIA
1  2017-10-03    F   3035    INDIA
1  2017-10-03    F   3035    INDIA
   ................................
   total 24 rows for F type and India
   ................................
2  2017-10-03    D   3035    CHINA
2  2017-10-03    D   3035    CHINA
2  2017-10-03    D   3035    CHINA
2  2017-10-03    D   3035    CHINA
2  2017-10-03    D   3035    CHINA
   ................................
   total 24 rows for D type and China
   ................................

预期输出:我想向日期列添加小时数(从 00:00 到 23:00)。 日期、类型、位置正好有 24 行。所以我只需要循环遍历日期列,获取前 24 行,附加时间(00:00 到 23:00),然后对接下来的 24 行执行相同的操作,依此类推...

0  2017-10-03 00:00   D   3035    INDIA
0  2017-10-03 01:00   D   3035    INDIA
0  2017-10-03 02:00   D   3035    INDIA
0  2017-10-03 03:00   D   3035    INDIA
0  2017-10-03 04:00   D   3035    INDIA
   ................................
   total 24 rows for D type and India
   ................................
1  2017-10-03 01:00    F   3035    INDIA
1  2017-10-03 02:00    F   3035    INDIA
1  2017-10-03 03:00    F   3035    INDIA
1  2017-10-03 03:00    F   3035    INDIA
1  2017-10-03 04:00    F   3035    INDIA

最佳答案

我认为你可以使用groupby按索引 cumcount计算计数,然后将其转换为小时 to_timedelta它被添加到日期s:

#convert to datetime if necessary
df['date'] = pd.to_datetime(df['date'])

df['date'] += pd.to_timedelta(df.groupby(level=0).cumcount(), unit='H')

print (df.head(30))

                 date type  value location
0 2017-10-03 00:00:00    D   3035    INDIA
0 2017-10-03 01:00:00    D   3035    INDIA
0 2017-10-03 02:00:00    D   3035    INDIA
0 2017-10-03 03:00:00    D   3035    INDIA
0 2017-10-03 04:00:00    D   3035    INDIA
0 2017-10-03 05:00:00    D   3035    INDIA
0 2017-10-03 06:00:00    D   3035    INDIA
0 2017-10-03 07:00:00    D   3035    INDIA
0 2017-10-03 08:00:00    D   3035    INDIA
0 2017-10-03 09:00:00    D   3035    INDIA
0 2017-10-03 10:00:00    D   3035    INDIA
0 2017-10-03 11:00:00    D   3035    INDIA
0 2017-10-03 12:00:00    D   3035    INDIA
0 2017-10-03 13:00:00    D   3035    INDIA
0 2017-10-03 14:00:00    D   3035    INDIA
0 2017-10-03 15:00:00    D   3035    INDIA
0 2017-10-03 16:00:00    D   3035    INDIA
0 2017-10-03 17:00:00    D   3035    INDIA
0 2017-10-03 18:00:00    D   3035    INDIA
0 2017-10-03 19:00:00    D   3035    INDIA
0 2017-10-03 20:00:00    D   3035    INDIA
0 2017-10-03 21:00:00    D   3035    INDIA
0 2017-10-03 22:00:00    D   3035    INDIA
0 2017-10-03 23:00:00    D   3035    INDIA
1 2017-10-03 00:00:00    F   3035    INDIA
1 2017-10-03 01:00:00    F   3035    INDIA
1 2017-10-03 02:00:00    F   3035    INDIA
1 2017-10-03 03:00:00    F   3035    INDIA
1 2017-10-03 04:00:00    F   3035    INDIA
1 2017-10-03 05:00:00    F   3035    INDIA

关于python - 将小时(00 到 23)添加到日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664263/

相关文章:

Python Imaplib : Get new gmail mails without reconnect

python - 在不同的数据框中搜索匹配项,然后将列重命名为匹配项

python - Pandas to_sql - 追加与替换

python - 未实现错误 : file structure not yet supported from pandas read_csv

python - 对相似的时间序列进行聚类?

python - GAE Python 2.7,没有 _io 模块?

python - Pandas:将季度数据转换为月度数据

cassandra - Cassandra 中的时间序列数据,每个月的键空间而不是一个键空间?

r - 使用纵向数据集计算随时间变化的百分比

refactoring - Python:将此检查重构为自己的方法是否有意义?