Оператор If в сгруппированном фрейме данных и сравнении дат

#python #pandas

#python #pandas

Вопрос:

У меня есть набор данных, который содержит столбцы стран GEOGN и их исторические данные. Я сгруппировал данные по странам и исключил все строки, в которых df значение ниже 5% квантиля для каждой страны с NaN . Код приведен ниже:

 def replace(group):
    quantile = group.quantile(0.05)
    smallest_five = group < quantile
    group[smallest_five ] = np.NaN
    return group

df = df.groupby('GEOGN').apply(replace)
  

Рассмотрим следующий фрейм данных:

   GEOGN  2009-06  2010-01  2010-02   ...     2011-02  2011-03  2011-04  2011-05
0   GER        1        4       10   ...           4        7        6        3
1   GER        5        6        9   ...           6        2       10        2
2   GER        1        4        7   ...           4        8        6        6
3   GER       10        9        6   ...           6        2        1        8
4   USA        9        9        5   ...          10        3        1       10
5   USA        2        4        5   ...           4        5        4        3
6   USA        3        4        3   ...           8        4        2        1
7   USA       10        2        8   ...           2        3        9        9 
  

Теперь я хотел бы выполнить ту же операцию на основе условия.

Во-первых, операция должна проверить, является ли значение month < 6 or month > 5 истинным в каждом столбце. Если первое утверждение истинно, то оно должно выполнить несколько иную операцию, как указано выше. Он должен сравнить df с предыдущим 5% квантилем: outliers = group < quantile.shift(1) .

Вот приблизительное представление о моем текущем подходе:

 def replace(group):
    quantile = group.quantile(0.05)
    smallest_five = group < quantile.shift(1)
    group[smallest_five] = np.NaN
    return group

 def replace_next(group):
    quantile = group.quantile(0.05)
    smallest_five = group < quantile
    group[smallest_five] = np.NaN
    return group

for column_name in df.drop(df.columns[range(1)], axis=1):
    column_date = pd.to_datetime(column_name)
    if column_date.month < 6:
         df.groupby('GEOGN').apply(replace)
    else:
         df.groupby('GEOGN').apply(replace_next)  
  

Ценю любые предложения.