fix: missing mulitiple metrics on pivot operator (#16026)

* fix: missing mulitiple metrics on pivot operator

* code smell
This commit is contained in:
Yongjie Zhao 2021-08-02 19:37:10 +01:00 committed by GitHub
parent a889cb3505
commit 3f57ea76db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 2 deletions

View File

@ -271,8 +271,9 @@ def pivot( # pylint: disable=too-many-arguments
series_set = set()
if not drop_missing_columns and columns:
for row in df[columns].itertuples():
metrics_and_series = tuple(aggfunc.keys()) + tuple(row[1:])
series_set.add(str(metrics_and_series))
for metric in aggfunc.keys():
series_set.add(str(tuple([metric]) + tuple(row[1:])))
df = df.pivot_table(
values=aggfunc.keys(),
index=index,

View File

@ -258,6 +258,7 @@ class TestPostProcessing(SupersetTestCase):
)
def test_pivot_eliminate_cartesian_product_columns(self):
# single metric
mock_df = DataFrame(
{
"dttm": to_datetime(["2019-01-01", "2019-01-01"]),
@ -277,6 +278,33 @@ class TestPostProcessing(SupersetTestCase):
self.assertEqual(list(df.columns), ["dttm", "0, 0", "1, 1"])
self.assertTrue(np.isnan(df["1, 1"][0]))
# multiple metrics
mock_df = DataFrame(
{
"dttm": to_datetime(["2019-01-01", "2019-01-01"]),
"a": [0, 1],
"b": [0, 1],
"metric": [9, np.NAN],
"metric2": [10, 11],
}
)
df = proc.pivot(
df=mock_df,
index=["dttm"],
columns=["a", "b"],
aggregates={
"metric": {"operator": "mean"},
"metric2": {"operator": "mean"},
},
drop_missing_columns=False,
)
self.assertEqual(
list(df.columns),
["dttm", "metric, 0, 0", "metric, 1, 1", "metric2, 0, 0", "metric2, 1, 1"],
)
self.assertTrue(np.isnan(df["metric, 1, 1"][0]))
def test_aggregate(self):
aggregates = {
"asc sum": {"column": "asc_idx", "operator": "sum"},