2016-05-11 3 views
1

У меня есть набор данных с некоторыми столбцами, которые я использую для группировки базы данных. У меня есть несколько других столбцов в одном наборе данных с некоторыми отсутствующими значениями. Я хочу заполнить недостающие значения столбца средним значением группы, в которой находится недостающая запись.Как заполнить недостающие данные в кадре данных на основе сгруппированных объектов?

Name of Pandas dataset=data 
    Col on which groups would be based=['A','B'] 
    Col that needs to be imputed with group based means: ['C'] 
+0

Можете ли вы показать пример? – xwang

ответ

2

Я думаю, что вы можете использовать groupby с transform:

import pandas as pd 
import numpy as np 

df = pd.DataFrame([[1,1,3], 
        [1,1,9], 
        [1,1,np.nan], 
        [2,2,8], 
        [2,1,4], 
        [2,2,np.nan], 
        [2,2,5]] 
        , columns=list('ABC')) 
print df 
    A B C 
0 1 1 3.0 
1 1 1 9.0 
2 1 1 NaN 
3 2 2 8.0 
4 2 1 4.0 
5 2 2 NaN 
6 2 2 5.0 

df['C'] = df.groupby(['A', 'B'])['C'].transform(lambda x: x.fillna(x.mean())) 
print df 
    A B C 
0 1 1 3.0 
1 1 1 9.0 
2 1 1 6.0 
3 2 2 8.0 
4 2 1 4.0 
5 2 2 6.5 
6 2 2 5.0 
+0

Это так же изящно, как и получается. Спасибо. –

+0

Если мой ответ был полезен, не забудьте [принять] (http://meta.stackexchange.com/a/5235/295067). Благодарю. – jezrael

0
[df[i].fillna(df[i].mean(),inplace=True) for i in df.columns ] 

Это заполняет затем NAN из колонки C с 5,8, который является средним столбцов 'C'

Output  
    print df 
     A B C 
    0 1 1 3.0 
    1 1 1 9.0 
    2 1 1 5.8 
    3 2 2 8.0 
    4 2 1 4.0 
    5 2 2 5.8 
    6 2 2 5.0 
+0

Вы заменяете NaN значком столбца. Мне нужно было немного больше. –

+0

А теперь, я вижу, чего вы хотели :) (отстранил его от jezrael его ответ) – 5nv

Смежные вопросы