необходимо заполнить значения NA последними тремя значениями до значений na в python - PullRequest
0 голосов
/ 03 мая 2018

необходимо заполнить значения NA последними тремя значениями среднего значения этого NA

это мой набор данных

RECEIPT_MONTH_YEAR NET_SALES

0 2014-01-01 818817.20

1 2014-02-01 362377.20

2 2014-03-01 374644.60

3 2014-04-01 NA

4 2014-05-01 NA

5 2014-06-01 NA

6 2014-07-01 NA

7 2014-08-01 46382.50

8 2014-09-01 55933,70

9 2014-10-01 292303.40

10 2014-10-01 382928.60

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Это просто, но работает

df_data.fillna(0,inplace=True)
for i in range(0,len(df_data)):
if df_data['NET_SALES'][i]== 0.00:
    condtn = df_data['NET_SALES'][i-1]+df_data['NET_SALES'][i-2]+df_data['NET_SALES'][i-3]
    df_data['NET_SALES'][i]=condtn/3
0 голосов
/ 05 мая 2018

Вы можете использовать fillna (при условии, что ваш NA уже np.nan) и скользящее среднее:

import pandas as pd
import numpy as np

df = pd.DataFrame([818817.2,362377.2,374644.6,np.nan,np.nan,np.nan,np.nan,46382.5,55933.7,292303.4,382928.6], columns=["NET_SALES"])

df["NET_SALES"] = df["NET_SALES"].fillna(df["NET_SALES"].shift(1).rolling(3, min_periods=1).mean())

Из:

NET_SALES
0   818817.2
1   362377.2
2   374644.6
3   518613.0
4   368510.9
5   374644.6
6   NaN
7   46382.5
8   55933.7
9   292303.4
10  382928.6

Если вы хотите включить вмененные значения, я думаю, вам нужно использовать цикл.

0 голосов
/ 03 мая 2018

это набор данных .csv-файл или кадр данных. Этот NA - это «NaN» или строка?

import pandas as pd
import numpy as np
df=pd.read_csv('your dataset',sep=' ')
df.replace('NA',np.nan)
df.fillna(method='ffill',inplace=True) 

Вы упомянули что-то о среднем из 3-х значений. Выше просто заполняет последнее наблюдение перед началом NaN. Часто это хороший способ прогнозирования (в некоторых случаях лучше, чем принимать средства, если настойчивость важна)

 ind = df['NET_SALES'].index[df['NET_SALES'].apply(np.isnan)]
 Meanof3 = df.iloc[ind[0]-3:ind[0]].mean(axis=1,skipna=True)
 df.replace('NA',Meanof3)

Возможно, ответ можно обобщить и улучшить, если известна дополнительная информация о наборе данных, например, если вы всегда хотите получить среднее значение за последние 3 измерения перед любым NA. Вышеприведенное позволит вам проверить индексы, которые являются NaN, а затем принять среднее значение 3 раньше, игнорируя при этом NaN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...