У меня есть pandas dataFrame, который содержит значения нескольких параметров с отметками времени, которые находятся на расстоянии 15 минут. Параметры могут содержать значения NaN (np.nan). Моя цель - найти общее количество доступных значений в месяц для каждого параметра, то есть общее количество значений в этом месяце, которые не равны 0 или np.nan.
Я попытался превратить все допустимые значения (значения, отличные от нуля или np.nan) в 1; и все недопустимые значения в 0. Таким образом я могу просто суммировать все значения параметра за месяц и получить общее количество доступных значений за этот месяц.
df.fillna(0)
for col in selected_parameters:
df.loc[df[col] > 0, col] = 1
Это создает df, имеющий 1 для действительных значений и 0 для недопустимых значений.
Чего я не могу сделать, так это создать новый dataFrame, который будет иметь временные метки с интервалом в месяц (вместо 15 минут), и для каждого месяца я могу иметь общее количество доступных значений за этот месяц.






Используйте groupby с суммой в качестве функции агрегатора
df.groupby([df.index.dt.year, df.index.dt.month]).agg('sum')
Это предполагает, что ваши временные метки находятся в индексе.
Могу ли я сделать это таким образом, чтобы сумма вычислялась только для «selected_parameters», а не для всех неиндексных параметров?
что-то вроде этого? df [выбранные_параметры] .groupby ([df.index.year, df.index.month]). agg ('сумма')
Благодаря тонну! Кстати, я использовал временные метки, поэтому не нужно было делать index.dt. "df.groupby ([df.index.year, df.index.month]). agg ('sum')" работал у меня.