Example #1
0
def test_transform_listlike(axis, float_frame, ops, names):
    # GH 35964
    other_axis = 1 if axis in {0, "index"} else 0
    with np.errstate(all="ignore"):
        expected = zip_frames([op(float_frame) for op in ops], axis=other_axis)
    if axis in {0, "index"}:
        expected.columns = MultiIndex.from_product([float_frame.columns, names])
    else:
        expected.index = MultiIndex.from_product([float_frame.index, names])
    result = float_frame.transform(ops, axis=axis)
    tm.assert_frame_equal(result, expected)
def test_agg_transform(axis, float_frame):
    other_axis = 1 if axis in {0, "index"} else 0

    with np.errstate(all="ignore"):

        f_abs = np.abs(float_frame)
        f_sqrt = np.sqrt(float_frame)

        # ufunc
        result = float_frame.transform(np.sqrt, axis=axis)
        expected = f_sqrt.copy()
        tm.assert_frame_equal(result, expected)

        result = float_frame.transform(np.sqrt, axis=axis)
        tm.assert_frame_equal(result, expected)

        # list-like
        expected = f_sqrt.copy()
        if axis in {0, "index"}:
            expected.columns = pd.MultiIndex.from_product(
                [float_frame.columns, ["sqrt"]])
        else:
            expected.index = pd.MultiIndex.from_product(
                [float_frame.index, ["sqrt"]])
        result = float_frame.transform([np.sqrt], axis=axis)
        tm.assert_frame_equal(result, expected)

        # multiple items in list
        # these are in the order as if we are applying both
        # functions per series and then concatting
        expected = zip_frames([f_abs, f_sqrt], axis=other_axis)
        if axis in {0, "index"}:
            expected.columns = pd.MultiIndex.from_product(
                [float_frame.columns, ["absolute", "sqrt"]])
        else:
            expected.index = pd.MultiIndex.from_product(
                [float_frame.index, ["absolute", "sqrt"]])
        result = float_frame.transform([np.abs, "sqrt"], axis=axis)
        tm.assert_frame_equal(result, expected)