Python, умножающий numpy.timedeltas64 на float в Pandas Dataframe - PullRequest
0 голосов
/ 09 мая 2018

У меня следующий образец данных, созданный как df:

import numpy as np
import pandas as pd
now = pd.datetime.now().replace(microsecond=0)
dates = pd.date_range(now, periods = 30*60*60, freq='S')
N=15
df = pd.DataFrame({'id':range(1, N+1, 1), 'stime': np.random.choice(dates, size=N), 'etime': np.random.choice(dates, size=N), 'mult':np.random.rand(N)})
df.loc[:,'duration'] = df['etime'] - df['stime']
df
                 etime  id      mult               stime          duration
0  2018-05-10 11:51:41   1  0.566939 2018-05-09 23:35:27   0 days 12:16:14
1  2018-05-09 22:38:13   2  0.403033 2018-05-09 15:49:24   0 days 06:48:49
2  2018-05-09 18:24:55   3  0.758680 2018-05-09 20:22:22 -1 days +22:02:33
3  2018-05-09 10:08:12   4  0.829369 2018-05-10 14:08:13 -2 days +19:59:59
4  2018-05-10 04:32:41   5  0.314382 2018-05-10 12:50:18 -1 days +15:42:23
5  2018-05-09 15:02:06   6  0.473411 2018-05-09 20:27:24 -1 days +18:34:42
6  2018-05-09 22:25:43   7  0.367398 2018-05-09 12:31:41   0 days 09:54:02
7  2018-05-10 05:30:56   8  0.591833 2018-05-09 21:13:55   0 days 08:17:01
8  2018-05-09 23:49:05   9  0.080266 2018-05-10 12:40:43 -1 days +11:08:22
9  2018-05-10 13:24:00  10  0.523454 2018-05-10 06:04:01   0 days 07:19:59
10 2018-05-10 14:35:25  11  0.392015 2018-05-10 13:03:00   0 days 01:32:25
11 2018-05-10 11:23:48  12  0.178010 2018-05-10 12:48:52 -1 days +22:34:56
12 2018-05-10 03:31:42  13  0.582963 2018-05-10 12:14:24 -1 days +15:17:18
13 2018-05-09 12:03:18  14  0.499407 2018-05-10 11:13:47 -1 days +00:49:31
14 2018-05-09 15:56:17  15  0.527276 2018-05-09 13:16:18   0 days 02:39:59

Я хочу создать следующие столбцы, но выдает TypeError: incompatible type [float64] for a datetime/timedelta operation:

 df.loc[:, 'wwx'] = df['duration']*df['mult']*df['mult']
 df.loc[:, 'wx'] = df['duration']*df['mult']

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 09 мая 2018

Может быть проще преобразовать его в разницу во времени, а затем обратно. Попробуйте, например:

zero = pd.to_datetime('00:00:00')
pd.to_datetime((pd.to_datetime(df.duration) - zero).astype(int) *  df['mult'] * df['mult']) - zero
...