#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)
Ценю любые предложения.