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)