Python использование timedeltas для суммы, не работающей должным образом, не может разыграть скаляр - PullRequest
0 голосов
/ 20 марта 2020

Там много материала о timedelta, но предложения не работают для моего варианта использования.

Я преобразовал столбец записей времени в timedelta следующим образом:

Time: 04:19:03 to Time: 0 days 04:19:03
Time: 00:25:28 to Time: 0 days 00:25:28

Я хотел бы суммировать timedeltas на основе параметров, которые я определил, например:

groups = sample.groupby('user')['time']
flag = sample.groupby('user')['flag'].transform('max')
sample['time_new'] = np.select([flag.eq(0), flag.isin([1,2])], [groups.transform('sum'), groups.transform('max')]) 

Однако я получаю следующую ошибку:

TypeError: Cannot cast scalar from dtype('<m8[ns]') to dtype('<m8') according to the rule 'same_kind'

Когда я делаю это:

sample.loc[:,'time'] = pd.to_timedelta(sample['time'])

Мои данные для справки выглядят так:

User: 1 Flag: 0 Time: 04:00:03
User: 1 Flag: 0 Time: 00:25:00

User: 2 Flag: 1 Time: 04:20:00
User: 2 Flag: 1 Time: 01:26:00

User: 3 Flag: 2 Time: 1:00:01
User: 3 Flag: 2 Time: 14:00:02

И хотелось бы, чтобы это выглядело следующим образом:

User: 1 Flag: 0 Time: 04:25:03
User: 1 Flag: 0 Time: 04:25:03

User: 2 Flag: 1 Time: 04:20:00
User: 2 Flag: 1 Time: 04:20:00

User: 3 Flag: 2 Time: 14:00:02
User: 3 Flag: 2 Time: 14:00:02

Итак, как вы можете видеть, добавляется только флаг 0, потому что так определен мой параметр группировки. Мне нужно преобразовать в формат времени, который я могу суммировать, когда флаг равен 0, в противном случае он просто принимает максимальное значение.

...