をラッパーを追加し、私はnuniqueでの問題は、それが私がGROUPBYが空である場合という簡単なチェックを追加したいエラーオーバーライドnunique()またはそれに
>df
Empty DataFrame
Columns: [A, B]
Index: []
>df.groupby(['A'])['B'].nunique()
IndexError: index 0 is out of bounds for axis 0 with size 0
で終わる空のGROUPBYによって呼び出されていちょうど空のシリーズを返します。
私はポータブルPythonでnuniqueのDEFを変更して動作しますが、チェックを追加しました:
def nunique(self, dropna=True):
""" Returns number of unique elements in the group """
ids, _, _ = self.grouper.group_info
val = self.obj.get_values()
try:
sorter = np.lexsort((val, ids))
except TypeError: # catches object dtypes
assert val.dtype == object, \
'val.dtype must be object, got %s' % val.dtype
val, _ = algos.factorize(val, sort=False)
sorter = np.lexsort((val, ids))
isnull = lambda a: a == -1
else:
isnull = com.isnull
ids, val = ids[sorter], val[sorter]
if ids.size == 0: ######Thats what I've added
return Series(ids,index=self.grouper.result_index,name=self.name)
# group boundaries are where group ids change
# unique observations are where sorted values change
idx = np.r_[0, 1 + np.nonzero(ids[1:] != ids[:-1])[0]]
inc = np.r_[1, val[1:] != val[:-1]]
# 1st item of each group is a new unique observation
mask = isnull(val)
if dropna:
inc[idx] = 1
inc[mask] = 0
else:
inc[mask & np.r_[False, mask[:-1]]] = 0
inc[idx] = 1
out = np.add.reduceat(inc, idx).astype('int64', copy=False)
res = out if ids[0] != -1 else out[1:]
ri = self.grouper.result_index
# we might have duplications among the bins
if len(res) != len(ri):
res, out = np.zeros(len(ri), dtype=out.dtype), res
res[ids] = out
return Series(res,
index=ri,
name=self.name)
事は、私はポータブル自体を変更することはできませんで、私はnunique上書きまたはラッパー関数を追加して何とか必要がありますgroupby(...)。nunique()が呼び出されたときに呼び出されます。 私はオンラインで見ましたが、何も見つけられませんでした。申し訳ありませんが それは簡単なQかもしれないが、私は初心者プログラマだので私に簡単に行く:)
はの長さをチェックするために条件を追加して適用する機能を使用することについては何
あなたのパンダバージョンは何ですか?私は、バージョン0.19.2が 'df'が空のときに' df.groupby(['A'])['B'] .nunique() 'の空の系列を返すことを確認しました。 – gereleth
こんにちは、私のバージョンは0.18.1で、それはそれが後のバージョンで修正された既知の問題であることがわかりましたが、Pandasのアップデートは問題があります...おそらく私はpackage.whlをインストールすることができますどのパッケージですか?ありがとうございます –