Нахождение периода с наименьшим числом NA: s в нескольких временных рядах - PullRequest
0 голосов
/ 16 июня 2020

У меня примерно 20 000 временных рядов за 5-летний период. В этот период я ​​хотел бы найти 18-месячный период, который содержит как можно меньше NA: s. Каков наиболее эффективный способ сделать это в Python?

См. Прилагаемый пример структуры фрейма данных.

import pandas as pd

Загрузить набор данных и распечатать 5 верхних строк

df = pd.read_excel ('so.xlsx', index_col = 'Date')

Пример фрейма данных

1 Ответ

1 голос
/ 16 июня 2020

Вот решение (с использованием поддельных данных со случайным расположением NaN):

df = pd.DataFrame({"a": np.random.choice(list(np.arange(3)) + [np.NaN], len(time_range)), 
              "b": np.random.choice(list(np.arange(3)) + [np.NaN], len(time_range)), 
              "c": np.random.choice(list(np.arange(3)) + [np.NaN], len(time_range)), 
              "d": np.random.choice(list(np.arange(3)) + [np.NaN], len(time_range))}, 
             index=time_range)

# count the number of nan in any given 18-months period 
df["18_month_na"] = df.isna().sum(axis=1).rolling(18).sum()

# get the minimum.     
df.loc[df["18_month_na"].idxmin()]
...