@@ -143,6 +143,18 @@ def test_setitem_objects(self, obj):
143
143
144
144
145
145
class TestReductions :
146
+ @pytest .mark .parametrize ("name" , ["sum" , "std" , "min" , "max" , "median" ])
147
+ @pytest .mark .parametrize ("skipna" , [True , False ])
148
+ def test_reductions_empty (self , name , skipna ):
149
+ tdi = pd .TimedeltaIndex ([])
150
+ arr = tdi .array
151
+
152
+ result = getattr (tdi , name )(skipna = skipna )
153
+ assert result is pd .NaT
154
+
155
+ result = getattr (arr , name )(skipna = skipna )
156
+ assert result is pd .NaT
157
+
146
158
def test_min_max (self ):
147
159
arr = TimedeltaArray ._from_sequence (["3H" , "3H" , "NaT" , "2H" , "5H" , "4H" ])
148
160
@@ -160,11 +172,87 @@ def test_min_max(self):
160
172
result = arr .max (skipna = False )
161
173
assert result is pd .NaT
162
174
163
- @pytest .mark .parametrize ("skipna" , [True , False ])
164
- def test_min_max_empty (self , skipna ):
165
- arr = TimedeltaArray ._from_sequence ([])
166
- result = arr .min (skipna = skipna )
175
+ def test_sum (self ):
176
+ tdi = pd .TimedeltaIndex (["3H" , "3H" , "NaT" , "2H" , "5H" , "4H" ])
177
+ arr = tdi .array
178
+
179
+ result = arr .sum (skipna = True )
180
+ expected = pd .Timedelta (hours = 17 )
181
+ assert isinstance (result , pd .Timedelta )
182
+ assert result == expected
183
+
184
+ result = tdi .sum (skipna = True )
185
+ assert isinstance (result , pd .Timedelta )
186
+ assert result == expected
187
+
188
+ result = arr .sum (skipna = False )
189
+ assert result is pd .NaT
190
+
191
+ result = tdi .sum (skipna = False )
192
+ assert result is pd .NaT
193
+
194
+ result = arr .sum (min_count = 9 )
195
+ assert result is pd .NaT
196
+
197
+ result = tdi .sum (min_count = 9 )
198
+ assert result is pd .NaT
199
+
200
+ result = arr .sum (min_count = 1 )
201
+ assert isinstance (result , pd .Timedelta )
202
+ assert result == expected
203
+
204
+ result = tdi .sum (min_count = 1 )
205
+ assert isinstance (result , pd .Timedelta )
206
+ assert result == expected
207
+
208
+ def test_npsum (self ):
209
+ # GH#25335 np.sum should return a Timedelta, not timedelta64
210
+ tdi = pd .TimedeltaIndex (["3H" , "3H" , "2H" , "5H" , "4H" ])
211
+ arr = tdi .array
212
+
213
+ result = np .sum (tdi )
214
+ expected = pd .Timedelta (hours = 17 )
215
+ assert isinstance (result , pd .Timedelta )
216
+ assert result == expected
217
+
218
+ result = np .sum (arr )
219
+ assert isinstance (result , pd .Timedelta )
220
+ assert result == expected
221
+
222
+ def test_std (self ):
223
+ tdi = pd .TimedeltaIndex (["0H" , "4H" , "NaT" , "4H" , "0H" , "2H" ])
224
+ arr = tdi .array
225
+
226
+ result = arr .std (skipna = True )
227
+ expected = pd .Timedelta (hours = 2 )
228
+ assert isinstance (result , pd .Timedelta )
229
+ assert result == expected
230
+
231
+ result = tdi .std (skipna = True )
232
+ assert isinstance (result , pd .Timedelta )
233
+ assert result == expected
234
+
235
+ result = arr .std (skipna = False )
236
+ assert result is pd .NaT
237
+
238
+ result = tdi .std (skipna = False )
239
+ assert result is pd .NaT
240
+
241
+ def test_median (self ):
242
+ tdi = pd .TimedeltaIndex (["0H" , "3H" , "NaT" , "5H06m" , "0H" , "2H" ])
243
+ arr = tdi .array
244
+
245
+ result = arr .median (skipna = True )
246
+ expected = pd .Timedelta (hours = 2 )
247
+ assert isinstance (result , pd .Timedelta )
248
+ assert result == expected
249
+
250
+ result = tdi .median (skipna = True )
251
+ assert isinstance (result , pd .Timedelta )
252
+ assert result == expected
253
+
254
+ result = arr .std (skipna = False )
167
255
assert result is pd .NaT
168
256
169
- result = arr . max (skipna = skipna )
257
+ result = tdi . std (skipna = False )
170
258
assert result is pd .NaT
0 commit comments