我有一個不完整的數據框,incomplete_df
,如下所示。我想用相應的id
的平均amount
推算缺失的amount
。如果該特定id
的平均值本身爲NaN(請參見id=4
),我想使用總體平均值。熊貓:Impn NaN的
下面是示例數據和我的非常低效的解決方案:
import pandas as pd
import numpy as np
incomplete_df = pd.DataFrame({'id': [1,2,3,2,2,3,1,1,1,2,4],
'type': ['one', 'one', 'two', 'three', 'two', 'three', 'one', 'two', 'one', 'three','one'],
'amount': [345,928,np.NAN,645,113,942,np.NAN,539,np.NAN,814,np.NAN]
}, columns=['id','type','amount'])
# Forrest Gump Solution
for idx in incomplete_df.index[np.isnan(incomplete_df.amount)]: # loop through all rows with amount = NaN
cur_id = incomplete_df.loc[idx, 'id']
if (cur_id in means.index):
incomplete_df.loc[idx, 'amount'] = means.loc[cur_id]['amount'] # average amount of that specific id.
else:
incomplete_df.loc[idx, 'amount'] = np.mean(means.amount) # average amount across all id's
什麼是最快和最Python的/ pandonic的方式來實現這一目標?
在0.13您可以這樣做:http://pandas.pydata.org/pandas-docs/dev/missing_data.html#interpolation並查看缺失值部分:http://pandas.pydata.org/pandas-docs /dev/missing_data.html#cleaning-filling-missing-data – Jeff
@Jeff,謝謝。我擁有的不是時間序列。所以,從統計角度來看,我在尋找歸因而不是(間/額外)配置。我該如何處理給定ID的平均值本身是「NaN」的情況? – Rhubarb
請參閱下面的@DSM解決方案作爲您的想法。但插值可以在幀的FYI上工作;時間序列是無關緊要的。他們有很多選擇。 – Jeff