我正在尋找一種關於熊貓中非常大的數據框問題的解決方案。使用分組進行NAs的高效填充
比方說,我有一個非常大的數據框,其中有NAs。我想通過具有相同ID的行的平均值來填充這些NA。我知道一些ID與我無關(請參閱示例代碼中的數組「ids」)。
我想出了下面的代碼:
# relevant Ids
ids = [2,3]
# create example dataframe
test = pd.DataFrame([[1,1,4],[1,np.nan,np.nan],[1,3,5],[2,np.nan,3],[2,5,5],[2,7,np.nan],[3,4,np.nan],[3,np.nan,3],[3,8,9]],columns=['id','v1','v2'])
# fill NAs with the mean of the group defined by ID
test[test.id.isin(ids)] = pd.concat([test[test.id.isin(ids)].id,test[test.id.isin(ids)].groupby('id').transform(lambda x: x.fillna(x.mean()))],axis=1)
我在周圍有一個循環的環境中使用此。 在每個循環中,大約1000行將被添加到數據框,並且我必須爲這些行填充NAs。
這意味着,我可以擺脫這一點的每一點表現都會很棒。我試圖避免創建數據幀的副本,因爲這似乎更慢。
也許有人有一個想法?我認爲,例如過濾使用isin()三次應該避免,但我不能找到一個解決方案,而不復制數據框。
我不是python或pandas的專家,所以有可能是我錯過了一些東西。
通常有多少列? – Divakar
其實我會很滿意2列的解決方案:ID和價值例如 – hhllcks
如果有多個行與NaN,我們會填入所有這些行相同的平均值? – Divakar