Сумма TimeField часов / минут с пандами

Для записи я столкнулся с этим сообщением при решении этой проблемы:

Многострочная строка в JSTL добавляется в качестве атрибута title текстового поля. Затем Javascript добавляет это как текст по умолчанию в текстовое поле. Чтобы очистить этот текст от фокуса, значение должно совпадать с заголовком ... но сбой, так как много текстовых редакторов помещают\r\n вместо\n. Поэтому follownig избавится от нежелательных\r:

<% pageContext.setAttribute("newLineChar", "\r"); %> 
<c:set var="textAreaDefault" value="${fn:replace(textAreaDefault, newLineChar, '')}" />
1
задан diogenes 2 March 2019 в 04:14
поделиться

2 ответа

Вам просто нужно запустить собственный 1-строчный здесь, чтобы объединить time объекты в timedelta объекты, которые затем могут быть суммированы вместе. (см. строку «печать»)

from datetime import datetime, timedelta
import pandas as pd

phone = PhoneRecord.objects.all()
df = pd.DataFrame(list([i.__dict__ for i in phone])) # create pd.df from model query
df.et = df.et.fillna('00:00:00')  # some records are blank
print(df.et)
print("SUM:", sum([datetime.combine(datetime.min, time) - datetime.min for time in df.et.tolist()], timedelta()))

Вы должны получить что-то вроде этого:

0    00:00:20
1    00:00:20
2    00:00:50
3    00:00:30
4    00:00:20

SUM: 0:02:20

Мне пришлось немного изменить вещи, чтобы заставить их работать на моем конце, так что, надеюсь, То же самое относится и к вам, и к вашей версии Панд и Джанго. Надеюсь, это поможет!

0
ответ дан Keith Mitchell 2 March 2019 в 04:14
поделиться

Все вычисления, такие как получение средних значений, подсчет и т. Д., Должны выполняться (если возможно) с использованием механизма базы данных. Я не знаю о лежащей в основе проблеме, но использование pandas на стороне сервера для получения средних значений определенно излишне. Вам нужно взглянуть на средство агрегации Джанго.

Кроме того, вам, вероятно, необходимо реструктурировать модель. Если вам нужно сохранить продолжительность телефонного разговора, вы можете использовать вместо него FloatField, например

class PhoneRecord(models.Model):
    duration = models.FloatField(blank=True, default=0.0, help_text=_('duration in seconds')) 
    # other fields... 
    # also, you can set up  the duration field with `editable=False`, and 
    # calculate its value each time the record is created

В этом случае вы можете использовать Avg:

from django.db.models import Avg
PhoneRecords.objects.all().aggregate(Avg('duration'))

и получить что-то вроде этого

{'duration_avg': 12.3}
0
ответ дан bubble 2 March 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: