При повторной выборке в Pandas: как получить NaN, если все значения равны NaN, но при этом используется skipna = True? - PullRequest
1 голос
/ 26 марта 2020

Я использую:

df_monthly = df_daily.resample('MS').agg(pd.Series.sum, skipna=True)

Я хочу пропустить NaN, но в месяцах все дневные значения были NaN. Я хочу, чтобы df_monthly было NaN, а не 0. Как мне это сделать? сделать это?

1 Ответ

0 голосов
/ 27 марта 2020

Вам необходимо использовать параметр min_count в новой функции sum_with_mincount. Обратите внимание на квадратные скобки [] вокруг sum_with_mincount. Без скобок pandas не знает, как интерпретировать параметр agg скипна. К сожалению, это приводит к мультииндексу, который нужно сгладить с помощью последней строки кода.

Минимальный пример:

idx = pd.date_range(datetime(2020, 1, 1), datetime(2020, 3, 31), freq='D')
df_daily = pd.DataFrame(np.nan, index=idx, columns=['A', 'B'])

def sum_with_mincount(x): return x.sum(min_count=1)    
df_monthly = df_daily.resample('MS').agg([sum_with_mincount], skipna=True)
df_monthly.columns = [col[0] for col in df_monthly.columns]

Вывод:

            A       B
2020-01-01  nan     nan
2020-02-01  nan     nan
2020-03-01  nan     nan
...