diff --git a/api/api_v1/endpoints/query.py b/api/api_v1/endpoints/query.py index f082a5f..0c38414 100644 --- a/api/api_v1/endpoints/query.py +++ b/api/api_v1/endpoints/query.py @@ -212,7 +212,23 @@ async def funnel_model( df = await ckdb.query_dataframe(sql) # df.set_index('date',inplace=True) - data = {'level': cond_level} + data_list = [] + if df.shape == (0, 0): + return schemas.Msg(code=0, msg='ok', data={'list': data_list, 'level': cond_level}) + + tmp = {'title': '总体'} + tmp_df = df[['level', 'values']].groupby('level').sum() + tmp_df.sort_index(inplace=True) + for i in tmp_df.index: + tmp_df.loc[i, 'values'] = tmp_df.loc[i:]['values'].sum() + + tmp['n'] = tmp_df['values'].to_list() + tmp['p1'] = [100] + # tmp['p2'] = [] + for i, v in tmp_df.loc[2:, 'values'].items(): + tmp['p1'].append(round(v * 100 / tmp_df.loc[1, 'values'], 2)) + # tmp['p2'].append(round(v*100 / tmp_df.loc[i - 1, 'values'], 2)) + data_list.append(tmp) if groupby: # 补齐数据 concat_data = [] @@ -225,7 +241,7 @@ async def funnel_model( # df.sort_values(list((*groupby, 'level')), inplace=True, ascending=False) for key, tmp_df in df.groupby(groupby): - tmp = data.setdefault(key, {}) + tmp = {'title': key} tmp_df.set_index('level', inplace=True) tmp_df.sort_index(inplace=True) for i in tmp_df.index: @@ -233,23 +249,9 @@ async def funnel_model( tmp['n'] = tmp_df['values'].to_list() tmp['p1'] = [100] - tmp['p2'] = [] + # tmp['p2'] = [] for i, v in tmp_df.loc[2:, 'values'].items(): - tmp['p1'].append(round(v*100 / tmp_df.loc[1, 'values'], 2)) + tmp['p1'].append(round(v * 100 / tmp_df.loc[1, 'values'], 2)) # tmp['p2'].append(round(v*100 / tmp_df.loc[i - 1, 'values'], 2)) - - else: - tmp = data.setdefault('全部', {}) - df.set_index('level', inplace=True) - df.sort_index(inplace=True) - for i in df.index: - df.loc[i, 'values'] = df.loc[i:]['values'].sum() - - tmp['n'] = df['values'].to_list() - tmp['p1'] = [100] - tmp['p2'] = [] - for i, v in df.loc[2:, 'values'].items(): - tmp['p1'].append(round(v*100 / df.loc[1, 'values'], 2)) - # tmp['p2'].append(round(v*100 / df.loc[i - 1, 'values'], 2)) - - return schemas.Msg(code=0, msg='ok', data=data) + data_list.append(tmp) + return schemas.Msg(code=0, msg='ok', data={'list': data_list, 'level': cond_level})