@@ -289,7 +289,7 @@ def pandas_fillna(df, by, hasna=None, suffix=None):
289289 :param suffix: use a prefix for the NaN value
290290 :return: list of values chosen for each column, new dataframe (new copy)
291291 """
292- suffix = suffix if suffix else "²"
292+ suffix = suffix if suffix else "²nan "
293293 df = df .copy ()
294294 rep = {}
295295 for c in by :
@@ -364,7 +364,10 @@ def pandas_groupby_nan(df, by, axis=0, as_index=False, suffix=None, nanback=True
364364
365365 from pandas import DataFrame
366366
367- data = [dict(a=2, ind="a", n=1), dict(a=2, ind="a"), dict(a=3, ind="b"), dict(a=30)]
367+ data = [dict(a=2, ind="a", n=1),
368+ dict(a=2, ind="a"),
369+ dict(a=3, ind="b"),
370+ dict(a=30)]
368371 df = DataFrame(data)
369372 print(df)
370373 gr = df.groupby(["ind"]).sum()
@@ -378,7 +381,10 @@ def pandas_groupby_nan(df, by, axis=0, as_index=False, suffix=None, nanback=True
378381 from pandas import DataFrame
379382 from pandas_streaming.df import pandas_groupby_nan
380383
381- data = [dict(a=2, ind="a", n=1), dict(a=2, ind="a"), dict(a=3, ind="b"), dict(a=30)]
384+ data = [dict(a=2, ind="a", n=1),
385+ dict(a=2, ind="a"),
386+ dict(a=3, ind="b"),
387+ dict(a=30)]
382388 df = DataFrame(data)
383389 gr2 = pandas_groupby_nan(df, ["ind"]).sum()
384390 print(gr2)
@@ -436,10 +442,22 @@ def pandas_groupby_nan(df, by, axis=0, as_index=False, suffix=None, nanback=True
436442 res .grouper .groupings [0 ].grouping_vector = arr
437443 if (hasattr (res .grouper .groupings [0 ], '_cache' ) and
438444 'result_index' in res .grouper .groupings [0 ]._cache ):
439- res .grouper .groupings [0 ]._cache = {}
445+ index = res .grouper .groupings [0 ]._cache ['result_index' ]
446+ if len (rep ) == 1 :
447+ key = list (rep .values ())[0 ]
448+ new_index = numpy .array (index )
449+ for i in range (0 , len (new_index )): # pylint: disable=C0200
450+ if new_index [i ] == key :
451+ new_index [i ] = numpy .nan
452+ res .grouper .groupings [0 ]._cache ['result_index' ] = (
453+ index .__class__ (new_index ))
454+ else :
455+ raise NotImplementedError (
456+ "NaN values not implemented for multiindex." )
440457 else :
441- raise NotImplementedError ("Not implemented for type: {0}" .format (
442- type (res .grouper .groupings [0 ].grouper )))
458+ raise NotImplementedError (
459+ "Not implemented for type: {0}" .format (
460+ type (res .grouper .groupings [0 ].grouper )))
443461 res .grouper ._cache ['result_index' ] = res .grouper .groupings [0 ]._group_index
444462 else :
445463 if not nanback :
0 commit comments