簡體   English   中英

Pandas groupby dropna=False 不適用於申請

[英]Pandas groupby dropna=False does not work for apply

假設我有以下數據框。

df = pd.DataFrame({'a':[None,None,None], 'b':[1,1,2], 'c': [1,1,3], 'd': [1,1,1]})
df.groupby(['a', 'b', 'c'], dropna=True).d.sum()
=> Series([], Name: d, dtype: int64)
df.groupby(['a', 'b', 'c'], dropna=False).d.sum()
=> a    b  c
   NaN  1  1    2
        2  3    1
   Name: d, dtype: int64

dropna 標志上的輸出符合預期。

現在,我定義了一個要應用的自定義函數。

def _is_outlier(s):
    lower_limit = s.mean() - (s.std() * 2)
    upper_limit = s.mean() + (s.std() * 2)
    return ~s.between(lower_limit, upper_limit)
df.groupby(['a', 'b', 'c'], dropna=False).d.apply(_is_outlier)
=> Series([], Name: d, dtype: bool)
df.groupby(['a', 'b', 'c'], dropna=True).d.apply(_is_outlier)
=> Series([], Name: d, dtype: bool)

兩者都返回空系列。 看起來 dropna 對於應用功能沒有按預期工作。
有人知道這個問題的解決方法嗎?

謝謝,

看起來它是 1.3.3 版本中修復的錯誤。 發行說明

修復了 GroupBy.apply() 中的回歸,其中即使 dropna=False (GH43205) nan 值也會下降

您可以嘗試更新熊貓並檢查您是否仍然存在此問題嗎?

它會解決它使其成為df然后重置索引嗎?

pd.DataFrame(df.groupby(['a', 'b', 'c'], dropna=False).d.sum()).reset_index()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM