فهرست منبع

recalculate mean over displayed values

Daniel Sheffield 2 سال پیش
والد
کامیت
a8360741d1
1فایلهای تغییر یافته به همراه15 افزوده شده و 8 حذف شده
  1. 15 8
      app/activities/TransactionEditor.py

+ 15 - 8
app/activities/TransactionEditor.py

@@ -147,14 +147,21 @@ class TransactionEditor(FocusWidget):
         self.rating.update_rating(_avg, _min, _max, unit, price=price, quantity=quantity)
 
         # after truncating, need to recalculate avg(median), min, max
-        df = df.sort_values('ts_raw', ascending=True).truncate(after=self.graph._canvas_width-1)
-        self.graph.set_data(
-            df[['$/unit']].apply(
-                lambda x: (float(x['$/unit']),), axis=1
-            ), float(df['$/unit'].max()), vscale=[x for x in map(float, [
-                df['$/unit'].min(),
-                df['$/unit'].median(),
-                df['$/unit'].max()
+        df = df.sort_values('ts_raw', ascending=True, ignore_index=True).truncate(after=self.graph._canvas_width-1)
+        data = df[['$/unit','quantity']].apply(
+            lambda x: (float(x['$/unit']), float(x['quantity'])),
+            axis=1, result_type='broadcast'
+        )
+        data['avg'] = (data['$/unit']*data['quantity']).sum()/data['quantity'].sum()
+        data_max = data.max()['$/unit'] #.max()
+        assert len(data['avg'].unique()) == 1
+        norm = [ (x,) for x in data['$/unit'] ] #.to_records(index=False)
+        self.graph.set_data(norm, data_max,
+            vscale=[x for x in map(float, [
+                data['$/unit'].min(),
+                data['$/unit'].median(),
+                data['avg'].iloc[0],
+                data_max
             ])]
         )
         #self.graph.set_bar_width(1)