В моей таблице есть значения с плавающей точкой и логические значения. теперь я хочу сгруппировать все данные по date и вычислить Average для каждого значения (с плавающей запятой и логическим значением). Для моих значений с плавающей запятой это работает, для значений bool это просто "true", а не, например, 1, если все логические значения для данной даты верны.
Таблица:
| Date | Value1 | Value2 |
|:-----------|------------:|:------------:|
| 2020-02-04 | 2 | true |
| 2020-02-04 | 2 | false |
| 2020-02-04 | 4 | false |
| ... | ... | ... |
Класс метода:
@classmethod
def values_day(cls, current_date):
date_obj = date_obj_week(current_date)
boolVal = func.avg(cast(cls.Value2, Integer)).label("Value2")
floatVal = func.avg(cls.Value1).label("Value1")
return db.session.query(cls.Datum, boolVal, floatVal) \
.filter(cls.Date == current_date.strftime("%Y-%m-%d")) \
.group_by(cls.Date)\
.order_by("Date")
Конечная точка API:
class ValuesDay(Resource):
def get(self):
current_date = get_current_date()
data = DataModel.values_day(current_date)
data_json = data_schema_list_dump.dump(data)
return {"data": data_json}, 200
api.add_resource(ValuesDay, '/api/data/v1/values_day/')
Результат на момент:
{
"data": [
{
"Date": "2020-02-04",
"Value1": 2.666667,
"Value2": true
}
]
}
Ожидаемый результат:
{
"data": [
{
"Date": "2020-02-04",
"Value1": 2.666667,
"Value2": 0.333333
}
]
}
С Pandas: С pandas Я просто делаю среднее значение по всей таблице, и я получаю ожидаемый результат, но я не могу сделать это с помощью sqlalchemy
ordered_df = df.groupby("Date", as_index=False).agg("mean")
json_data = ordered_df.to_json(orient='records', force_ascii=False)