#python #pandas #datetime #pandas-groupby
Вопрос:
import pandas as pd
import numpy as np
data = {'Name':['Si','Ov','Sp','Sa','An'],
'Time1':['02:00:00', '03:02:00', '04:00:30','01:02:30','0'],
'Time2':['03:00:00', '0', '05:00:30','02:02:30','02:00:00']}
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
print (df)
Output
Name Time1 Time2
0 Siya 02:00:00 03:00:00
1 Ovi 03:02:00 0
2 Spruha 04:00:30 05:00:30
3 Saanvi 01:02:30 02:02:30
4 Ansh 0 02:00:00
хотите добавить еще один столбец и применить формулу
Время 3=(Время 1-Время 2)/Время 2
Также существует значение 0 или nan.
Ответ №1:
Используйте to_timedelta
для преобразования времени в временные интервалы:
t1 = pd.to_timedelta(df['Time1'])
t2 = pd.to_timedelta(df['Time2'])
df['Time3'] = t1.sub(t2).div(t2)
print (df)
Name Time1 Time2 Time3
0 Si 02:00:00 03:00:00 -0.333333
1 Ov 03:02:00 0 inf
2 Sp 04:00:30 05:00:30 -0.199667
3 Sa 01:02:30 02:02:30 -0.489796
4 An 0 02:00:00 -1.000000
Редактировать:
Для добавления новой строки и столбца используйте:
def format_timedelta(x):
ts = x.total_seconds()
hours, remainder = divmod(ts, 3600)
minutes, seconds = divmod(remainder, 60)
return ('{}:{:02d}:{:02d}').format(int(hours), int(minutes), int(seconds))
t1 = pd.to_timedelta(df['Time1'])
t2 = pd.to_timedelta(df['Time2'])
df['Time3'] = t1.sub(t2).div(t2)
idx = len(df)
df.loc[idx] = (pd.concat([t1, t2], axis=1)
.sum()
.apply(format_timedelta))
df.loc[idx, ['Name','Time3']] = ['Total', df['Time3'].mask(np.isinf(df['Time3'])).sum()]
print (df)
Name Time1 Time2 Time3
0 Si 02:00:00 03:00:00 -0.333333
1 Ov 03:02:00 0 inf
2 Sp 04:00:30 05:00:30 -0.199667
3 Sa 01:02:30 02:02:30 -0.489796
4 An 0 02:00:00 -1.000000
5 Total 10:05:00 12:03:00 -2.022796
Комментарии:
1. .Спасибо тебе. Это работает на меня. Я хочу добавить еще один вопрос: как добавить столбец общего итога в конце, который является общим итогом по столбцам?
2. @San — Use
df['Grand'] = df['Time3'].sum()
, Если мой ответ был полезен, не забудьте принять его. Спасибо.3. Я хочу добавить столбец Время 1 раз 2 . Ответ должен быть в том же формате чч:мм:сс
4. @San — Как ты думаешь
df['Time1']
, сdf['Time2']
чем это связано ?5. Нет.как сумма столбца Time1 в конце , сумма столбца time2 в конце.