@@ -2200,30 +2200,36 @@ def test_df_fill_value_operations(op):
22002200 tm .assert_frame_equal (df_result , df_expected )
22012201
22022202
2203- # ! Currently implementing
2204- # @pytest.mark.parametrize("input_data, fill_val",
2205- # [
2206- # (np.arange(50).reshape(10, 5), 5), #Numpy
2207- # (pd.array(np.random.choice([True, False], size=(10, 5)),
2208- # dtype="boolean"), True),
2209- # ]
2210- # )
2211- # def test_df_fill_value_dtype(input_data, fill_val):
2212- # # GH 61581
2213- # columns = list("ABCDE")
2214- # df = DataFrame(input_data, columns=columns)
2215- # for i in range(5):
2216- # df.iat[i, i] = np.nan
2217- # df.iat[i + 1, i] = np.nan
2218- # df.iat[i + 4, i] = np.nan
2219-
2220- # df_base = df.iloc[:, :-1]
2221- # df_mult = df.iloc[:, -1]
2222- # mask = df.isna().values
2223- # mask = mask[:, :-1] & mask[:, [-1]]
2224-
2225- # df_result = df_base.mul(df_mult, axis=0, fill_value=fill_val)
2226- # df_expected = (df_base.fillna(fill_val).mul(df_mult.fillna(fill_val),
2227- # axis=0)).mask(mask, np.nan)
2228-
2229- # tm.assert_frame_equal(df_result, df_expected)
2203+ dt_params = [
2204+ (tm .ALL_INT_NUMPY_DTYPES , 5 ),
2205+ (tm .ALL_INT_EA_DTYPES , 5 ),
2206+ (tm .FLOAT_NUMPY_DTYPES , 4.9 ),
2207+ (tm .FLOAT_EA_DTYPES , 4.9 ),
2208+ ]
2209+
2210+ dt_param_flat = [(dt , val ) for lst , val in dt_params for dt in lst ]
2211+
2212+
2213+ @pytest .mark .parametrize ("data_type, fill_val" , dt_param_flat )
2214+ def test_df_fill_value_dtype (data_type , fill_val ):
2215+ # GH 61581
2216+ base_data = np .arange (50 ).reshape (10 , 5 )
2217+ df_data = pd .array (base_data , dtype = data_type )
2218+ columns = list ("ABCDE" )
2219+ df = DataFrame (df_data , columns = columns )
2220+ for i in range (5 ):
2221+ df .iat [i , i ] = np .nan
2222+ df .iat [i + 1 , i ] = pd .NA
2223+ df .iat [i + 4 , i ] = pd .NA
2224+
2225+ df_base = df .iloc [:, :- 1 ]
2226+ df_mult = df .iloc [:, - 1 ]
2227+ mask = df .isna ().values
2228+ mask = mask [:, :- 1 ] & mask [:, [- 1 ]]
2229+
2230+ df_result = df_base .mul (df_mult , axis = 0 , fill_value = fill_val )
2231+ df_expected = (df_base .fillna (fill_val ).mul (df_mult .fillna (fill_val ), axis = 0 )).mask (
2232+ mask , np .nan
2233+ )
2234+
2235+ tm .assert_frame_equal (df_result , df_expected )
0 commit comments