@@ -2183,23 +2183,54 @@ def test_mixed_col_index_dtype(using_infer_string):
2183
2183
2184
2184
2185
2185
@pytest .mark .parametrize ("op" , ["add" , "sub" , "mul" , "div" , "mod" , "truediv" , "pow" ])
2186
- def test_df_series_fill_value (op ):
2186
+ def test_df_fill_value_operations (op ):
2187
2187
# GH 61581
2188
- data = np .arange (50 ).reshape (10 , 5 )
2188
+ input_data = np .arange (50 ).reshape (10 , 5 )
2189
+ fill_val = 5
2189
2190
columns = list ("ABCDE" )
2190
- df = DataFrame (data , columns = columns )
2191
+ df = DataFrame (input_data , columns = columns )
2191
2192
for i in range (5 ):
2192
2193
df .iat [i , i ] = np .nan
2193
2194
df .iat [i + 1 , i ] = np .nan
2194
2195
df .iat [i + 4 , i ] = np .nan
2195
2196
2196
- df_a = df .iloc [:, :- 1 ]
2197
- df_b = df .iloc [:, - 1 ]
2198
- nan_mask = df_a .isna ().astype (int ).mul (df_b .isna ().astype (int ), axis = 0 ).astype (bool )
2197
+ df_base = df .iloc [:, :- 1 ]
2198
+ df_mult = df .iloc [:, - 1 ]
2199
+ mask = df .isna ().values
2200
+ mask = mask [:, :- 1 ] & mask [:, [- 1 ]]
2199
2201
2200
- df_result = getattr (df_a , op )(df_b , axis = 0 , fill_value = 5 )
2201
- df_expected = getattr (df_a .fillna (5 ), op )( df_b . fillna ( 5 ), axis = 0 ). mask (
2202
- nan_mask , np . nan
2203
- )
2202
+ df_result = getattr (df_base , op )(df_mult , axis = 0 , fill_value = fill_val )
2203
+ df_expected = getattr (df_base .fillna (fill_val ), op )(
2204
+ df_mult . fillna ( fill_val ), axis = 0
2205
+ ). mask ( mask , np . nan )
2204
2206
2205
2207
tm .assert_frame_equal (df_result , df_expected )
2208
+
2209
+
2210
+ # ! Currently implementing
2211
+ # @pytest.mark.parametrize("input_data, fill_val",
2212
+ # [
2213
+ # (np.arange(50).reshape(10, 5), 5), #Numpy
2214
+ # (pd.array(np.random.choice([True, False], size=(10, 5)),
2215
+ # dtype="boolean"), True),
2216
+ # ]
2217
+ # )
2218
+ # def test_df_fill_value_dtype(input_data, fill_val):
2219
+ # # GH 61581
2220
+ # columns = list("ABCDE")
2221
+ # df = DataFrame(input_data, columns=columns)
2222
+ # for i in range(5):
2223
+ # df.iat[i, i] = np.nan
2224
+ # df.iat[i + 1, i] = np.nan
2225
+ # df.iat[i + 4, i] = np.nan
2226
+
2227
+ # df_base = df.iloc[:, :-1]
2228
+ # df_mult = df.iloc[:, -1]
2229
+ # mask = df.isna().values
2230
+ # mask = mask[:, :-1] & mask[:, [-1]]
2231
+
2232
+ # df_result = df_base.mul(df_mult, axis=0, fill_value=fill_val)
2233
+ # df_expected = (df_base.fillna(fill_val).mul(df_mult.fillna(fill_val),
2234
+ # axis=0)).mask(mask, np.nan)
2235
+
2236
+ # tm.assert_frame_equal(df_result, df_expected)
0 commit comments