Ejemplo n.º 1
0
 def test_keep_top_N_columns(self):
     """First N-1 columns are "group"; last column is "sort-in-group"."""
     table = pd.DataFrame(
         {
             # Groups are "acf", "adf", "bde" (read this code vertically)
             "A": ["a", "b", "a", "a", "a", "b"],
             "B": ["c", "d", "c", "c", "d", "d"],
             "C": ["f", "e", "f", "f", "f", "e"],
             "D": [1, 2, 3, 4, 5, 6],
         }
     )
     params = P(
         [
             {"colname": "A", "is_ascending": True},
             {"colname": "B", "is_ascending": True},
             {"colname": "C", "is_ascending": False},
             {"colname": "D", "is_ascending": False},
         ],
         keep_top="2",
     )
     result = render(table, params)
     assert_frame_equal(
         result,
         pd.DataFrame(
             {
                 "A": ["a", "a", "a", "b", "b"],
                 "B": ["c", "c", "d", "d", "d"],
                 "C": ["f", "f", "f", "e", "e"],
                 "D": [4, 3, 5, 6, 2],
             }
         ),
     )
Ejemplo n.º 2
0
 def test_keep_top_na_is_sorted_last(self):
     nan = np.nan  # to make the table line up -- ASCII art FTW
     table = pd.DataFrame(
         {
             # groups:
             # nan -- not a real group
             # 'a' -- 3 rows
             # 'b' -- 1 group
             "A": [nan, "a", "a", "a", "b"],
             "B": ["c", "c", "d", nan, nan],
             "C": [1, 2, 3, 4, 5],
         }
     )
     params = P(
         [
             {"colname": "A", "is_ascending": True},
             {"colname": "B", "is_ascending": False},
         ],
         keep_top="2",
     )
     result = render(table, params)
     assert_frame_equal(
         result,
         pd.DataFrame(
             {
                 "A": ["a", "a", "b", nan],
                 "B": ["d", "c", nan, "c"],
                 "C": [3, 2, 5, 1],
             }
         ),
     )
Ejemplo n.º 3
0
 def test_order_number_ascending(self):
     # NaN and NaT always appear last
     table = pd.DataFrame({"A": [3.0, np.nan, 2.1], "B": ["a", "b", "c"]})
     params = P([{"colname": "A", "is_ascending": True}])
     result = render(table, params)
     expected = pd.DataFrame({"A": [2.1, 3.0, np.nan], "B": ["c", "a", "b"]})
     assert_frame_equal(result, expected)
Ejemplo n.º 4
0
 def test_order_date(self):
     d1 = datetime.datetime(2018, 8, 15, 1, 23, 45)
     d2 = datetime.datetime(2018, 8, 15, 1, 34, 56)
     table = pd.DataFrame({"A": [d2, d1], "B": ["a", "b"]})
     params = P([{"colname": "A", "is_ascending": True}])
     result = render(table, params)
     expected = pd.DataFrame({"A": [d1, d2], "B": ["b", "a"]})
     assert_frame_equal(result, expected)
Ejemplo n.º 5
0
 def test_order_cat_str_ascending(self):
     table = pd.DataFrame({"A": ["a", "c", "b"], "B": [1, 2, 3]})
     table["A"] = table["A"].astype("category")
     params = P([{"colname": "A", "is_ascending": True}])
     result = render(table, params)
     expected = pd.DataFrame(
         {"A": pd.Series(["a", "b", "c"], dtype="category"), "B": [1, 3, 2]}
     )
     assert_frame_equal(result, expected)
Ejemplo n.º 6
0
    def test_params_duplicate_columns(self):
        params = P(
            [
                {"colname": "A", "is_ascending": False},
                {"colname": "A", "is_ascending": False},
            ]
        )

        result = render(pd.DataFrame(), params)
        self.assertEqual(result, i18n_message("badParam.sort_columns.duplicate"))
Ejemplo n.º 7
0
 def test_keep_top_removes_unused_categories(self):
     table = pd.DataFrame(
         {
             "A": [1, 2, 3, 4, 5],
             "B": pd.Series(["x", "y", "z", "a", "b"], dtype="category"),
         }
     )
     params = P([{"colname": "A", "is_ascending": True}], keep_top="2")
     result = render(table, params)
     assert_frame_equal(
         result,
         pd.DataFrame({"A": [1, 2], "B": pd.Series(["x", "y"], dtype="category")}),
     )
Ejemplo n.º 8
0
    def test_params_nix_empty_columns(self):
        params = P(
            [
                {"colname": "A", "is_ascending": False},
                {"colname": "", "is_ascending": False},
                {"colname": "B", "is_ascending": False},
            ]
        )

        result = render(
            pd.DataFrame({"A": [3, 2, 1], "B": [2, 3, 4], "C": [1, 2, 3]}), params
        )
        assert_frame_equal(
            result, pd.DataFrame({"A": [3, 2, 1], "B": [2, 3, 4], "C": [1, 2, 3]})
        )
Ejemplo n.º 9
0
 def test_keep_top_2_columns(self):
     table = pd.DataFrame(
         {
             "A": ["a", "a", "b", "b", "c", "c"],
             "B": ["a", "b", "a", "b", "a", "b"],
             "C": [1, 2, 3, 4, 5, 6],
         }
     )
     params = P(
         [
             {"colname": "A", "is_ascending": True},
             {"colname": "B", "is_ascending": False},
         ],
         keep_top="1",
     )
     result = render(table, params)
     assert_frame_equal(
         result,
         pd.DataFrame({"A": ["a", "b", "c"], "B": ["b", "b", "b"], "C": [2, 4, 6]}),
     )
Ejemplo n.º 10
0
 def test_params_initial_value_is_no_op(self):
     params = P([{"colname": "", "is_ascending": False}])
     result = render(pd.DataFrame(pd.DataFrame({"A": [1, 2]})), params)
     assert_frame_equal(result, pd.DataFrame({"A": [1, 2]}))
Ejemplo n.º 11
0
 def test_keep_top_with_one_column(self):
     table = pd.DataFrame({"A": [np.nan, "a", "a", "a", "b"], "B": [1, 2, 3, 4, 5]})
     params = P([{"colname": "A", "is_ascending": True}], keep_top="2")
     result = render(table, params)
     assert_frame_equal(result, pd.DataFrame({"A": ["a", "a"], "B": [2, 3]}))
Ejemplo n.º 12
0
 def test_order_number_descending(self):
     table = pd.DataFrame({"A": [3.0, np.nan, 2.1], "B": ["a", "b", "c"]})
     params = P([{"colname": "A", "is_ascending": False}])
     result = render(table, params)
     expected = pd.DataFrame({"A": [3.0, 2.1, np.nan], "B": ["a", "c", "b"]})
     assert_frame_equal(result, expected)
Ejemplo n.º 13
0
 def test_order_str_descending(self):
     table = pd.DataFrame({"A": ["a", "c", "b"], "B": [1, 2, 3]})
     params = P([{"colname": "A", "is_ascending": False}])
     result = render(table, params)
     expected = pd.DataFrame({"A": ["c", "b", "a"], "B": [2, 3, 1]})
     assert_frame_equal(result, expected)
Ejemplo n.º 14
0
    def test_params_keep_top_negative_is_error(self):
        params = P([{"colname": "A", "is_ascending": False}], keep_top="-2")

        result = render(pd.DataFrame({"A": [1, 2, 3]}), params)
        expected = i18n_message("badParam.keep_top.negative")
        self.assertEqual(result, expected)