You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.5 KiB

import pandas as pd
from django.conf import settings
import sqlalchemy
def raschet_real(df, koefs):
koef_summ = sum(koefs.values())
for k, v in koefs.items():
df[k] = (df[k] * v)
df['rate'] = df[list(koefs.keys())].apply(lambda x: sum([x[k]*koefs[k] for k in list(koefs.keys())]), axis=1)
df['rate'] = df['rate'] / koef_summ
return df
def raschet(tables, filters, koefs):
conn = sqlalchemy.create_engine(settings.DB_URL, connect_args={'options': '-csearch_path=public'})
msk_ao = filters.get('msk_ao')
msk_rayon = filters.get('msk_rayon')
category = filters.get('category', [])
categories = ','.join([f"'{c}'" for c in category])
points_df = None
nets_df = None
for table in tables:
if 'point' in table:
if msk_ao is not None:
query = f"select * from {table} where msk_ao={msk_ao} and category in ({categories});"
else:
query = f"select * from {table} where msk_rayon={msk_rayon} and category in ({categories});"
points = pd.read_sql(query, conn)
points_df = raschet_real(points, koefs)
if 'net' in table:
# if msk_ao is not None:
# query = f"select * from {table} where msk_ao={msk_ao};"
# else:
# query = f"select * from {table} where msk_rayon={msk_rayon};"
query = f"select * from {table};"
#
nets = pd.read_sql(query, conn)
nets_df = raschet_real(nets, koefs)
return points_df, nets_df