簡體   English   中英

Pandas fillna by each Group

[英]Pandas fillna by mean of each Group

我有一個 pandas dataframe 有幾個列。 我想用fillna's平均值填充 select 列。

import pandas as pd
import numpy as np

df = pd.DataFrame({
                   'cat': ['A','A','A','B','B','B','C','C'],
                   'v1': [10, 12, np.nan, 10, 14, np.nan, 11, np.nan],
                   'v2': [12, 8, np.nan, np.nan, 6, 12, 10, np.nan]
                 })

我正在尋找一種可擴展的解決方案,這意味着我可以應用在多個列上執行操作。

np.nan的將填充每組的mean

預計 output:

cat  v1   v2
 
A    10   12
A    12   8
A    11   10
B    10   9
B    14   6
B    12   12
C    11   10
C    11   10

其他類似的問題僅限於單個列,我正在尋找一種可推廣的解決方案,並且可以為多個列輸入缺失的NA

這將用列的平均值替換所有 np.nan

import pandas as pd
import numpy as np

df = pd.DataFrame({
                   'cat': ['A','A','A','B','B','B','C','C'],
                   'v1': [10, 12, np.nan, 10, 14, np.nan, 11, np.nan],
                   'v2': [12, 8, np.nan, np.nan, 6, 12, 10, np.nan]
                 })

for x in df.columns.drop('cat'):
    mean_of_column = df[x].mean()
    df[x].fillna(mean_of_column, inplace = True)
df

請注意,這將使該列成為浮點數,因為它們的意思不是整潔的整數。 但是,如果您願意,可以繼續使用它來刪除小數點。

嘗試這個:

df = df.fillna(df.groupby('cat').transform('mean'))

Output:

  cat    v1    v2
0   A  10.0  12.0
1   A  12.0   8.0
2   A  11.0  10.0
3   B  10.0   9.0
4   B  14.0   6.0
5   B  12.0  12.0
6   C  11.0  10.0
7   C  11.0  10.0

暫無
暫無

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

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