簡體   English   中英

熊貓:如何用groupby的平均值填充空值?

[英]Pandas: How to fill null values with mean of a groupby?

我有一個數據集將丟失一些看起來像這樣的數據:

id    category     value
1     A            NaN
2     B            NaN
3     A            10.5
4     C            NaN
5     A            2.0
6     B            1.0

我需要填寫空值來使用模型中的數據。 每次類別第一次出現時,它都是NULL。 我想要做的是對於像A類和B類這樣具有多個值的情況,用該類別的平均值替換空值。 對於只有單次出現的C類,只需填寫其余數據的平均值即可。

我知道我可以簡單地為C這樣的情況做到這一點來獲得所有行的平均值,但是我不得不嘗試為A和B做類別方法並替換空值。

df['value'] = df['value'].fillna(df['value'].mean()) 

我需要最終的df是這樣的

id    category     value
1     A            6.25
2     B            1.0
3     A            10.5
4     C            4.15
5     A            2.0
6     B            1.0

我想你可以使用groupbyapply fillnamean 如果某個類別只有NaN值,則獲取NaN ,因此使用列的所有值的mean來填充NaN

df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean()))
df.value = df.value.fillna(df.value.mean())
print (df)
   id category  value
0   1        A   6.25
1   2        B   1.00
2   3        A  10.50
3   4        C   4.15
4   5        A   2.00
5   6        B   1.00

您還可以使用GroupBy + transform以分組方式填充NaN值。 這種方法避免了低效的apply + lambda 例如:

df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())

暫無
暫無

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

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