Как установить серию в часть кадра данных? - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть данные временного ряда температуры с 15-минутными интервалами.Если временное значение отсутствует, я хочу взять среднее значение временных значений за последние / последующие 10 дней одновременно и поместить его вместо nan.

Это мой код. Возвращает серию панд со значениями, которые я хочу сохранить для значений na.

pd.Series(df.index[(df.Temp.isna())]).apply(last10daysmean)

Как мне поставить выше.в этот ниже?

df.Temp[df.Temp.isna()] 

Возвращает n слотов.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Вы можете попробовать записать значение строки по значению, применить функцию

df = pd.DataFrame()
df['value'] = np.random.random(len(pd.date_range(start='2019-1-1',end='2019-1-2',freq='15Min')))*10
df.index = pd.date_range(start='2019-1-1',end='2019-1-2',freq='15Min')
df.loc[df['value']<2,'value'

] = np.nan

Пример кадра данных

                        value
2019-01-01 00:00:00     NaN
2019-01-01 00:15:00     6.100087
2019-01-01 00:30:00     7.953615
2019-01-01 00:45:00     7.214069
2019-01-01 01:00:00     3.697723
2019-01-01 01:15:00     5.772333
2019-01-01 01:30:00     NaN
2019-01-01 01:45:00     2.827144

Функция для получения фрагмента кадра данных

def last10daysmean(x,ind):
    df.loc[ind,'value'] = x.mean()
temp = df.index.map(lambda x: last10daysmean(df['value'].loc[x:x+10],x) if math.isnan(df.loc[x,'value']) else df.loc[x,'value'])

Out:

                        value
2019-01-01 00:00:00     5.901569
2019-01-01 00:15:00     6.100087
2019-01-01 00:30:00     7.953615
2019-01-01 00:45:00     7.214069
2019-01-01 01:00:00     3.697723
2019-01-01 01:15:00     5.772333
2019-01-01 01:30:00     5.594577
2019-01-01 01:45:00     2.827144
2019-01-01 02:00:00     6.409086
0 голосов
/ 03 февраля 2019

У меня нет функции last10daysmean из вашего вопроса, поэтому я могу заменить ее следующим:

def last10daysmean(x):
  return "TenDaysMeanPlaceholder"

Вы должны попытаться получить образцы данных, когда вы отправляете вопрос, но я могу просто сделатьвременные данные сейчас:

df = pd.DataFrame({
    "Temp": [2, 3, 4, 5, 6, np.nan, 3, 4, np.nan]
})

Это заполнит строки isna выводом нашей фиктивной версии для вашей функции last10daysmean:

df.Temp[df.Temp.isna()] = df.Temp[df.Temp.isna()].apply(last10daysmean)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...