错误很明显:
pd.Timestamp
接受标量值(float或int),而不是数组作为分钟。
astype
>>> df.tp.astype('timedelta64[m]')
date
2020-10-21 0 days 00:01:00
2020-10-21 0 days 00:02:00
2020-10-21 0 days 00:03:00
2020-10-21 0 days 00:04:00
2020-10-21 0 days 00:05:00
...
2020-10-22 0 days 00:44:00
2020-10-22 0 days 00:45:00
2020-10-22 0 days 00:46:00
2020-10-22 0 days 00:47:00
2020-10-22 0 days 00:48:00
Name: tp, Length: 96, dtype: timedelta64[ns]
在这里
timedelta64[m]
df.index
直接代替
df.index.time
使用datetime对象。从那里很容易:
>>> df['time'] = df.index + (30 * (df.tp - 1)).astype('timedelta64[m]')
>>> df
tp time
date
2020-10-21 1 2020-10-21 00:00:00
2020-10-21 2 2020-10-21 00:30:00
2020-10-21 3 2020-10-21 01:00:00
2020-10-21 4 2020-10-21 01:30:00
2020-10-21 5 2020-10-21 02:00:00
... .. ...
2020-10-22 44 2020-10-22 21:30:00
2020-10-22 45 2020-10-22 22:00:00
2020-10-22 46 2020-10-22 22:30:00
2020-10-22 47 2020-10-22 23:00:00
2020-10-22 48 2020-10-22 23:30:00
[96 rows x 2 columns]