Я безуспешно пытался найти способ создать "average_gain_up" в python и немного застрял.Будучи новичком в groupby, есть кое-что из того, как он обрабатывает функции, которые мне не удалось понять, поэтому любая интуиция в том, как продумать эти типы проблем, будет полезна.
Проблема: Создайте скользящую 14-дневную сумму, суммируя только если значение> 0.
new=pd.DataFrame([[1,-2,3,-2,4,5],['a','a','a','b','b','b']])
new= new.T #transposing into a friendly groupby format
#Group by a or b, filter to only have positive values and then sum rolling, we
keep NAs to ensure the sum is ran over 14 values.
groupby=new.groupby(1)[0].filter(lambda x: x>0,dropna=False).rolling(14).sum()
Предполагаемая сумма Рамка:
x.all () / len (x) результат:
это выдает ошибку типа «фильтр должен вернуть логический результат».читая другие ответы, я понимаю, что спрашиваю, превосходит ли серия / кадр 0.Приведенный выше код работает с len (x), опять же имеет смысл в этом контексте.
Я пробовал также с all (), но он не работает должным образом.Функции .all () возвращают по одному логическому значению на группу, и тогда сумма является простой скользящей суммой.
Я пытался создать список логических значений, чтобы сказать, какие значения положительны, а какие нет, но это также приводит к ошибке, на этот раз я не уверен, почему.
groupby1=new.groupby(1)[0]
groupby2=[y>0 for x in groupby1 for y in x[1] ]
groupby_try=new.groupby(1)[0].filter(lambda x:groupby2,dropna=False).rolling(2).sum()
1) как заставить работать приведенный выше код и что не так в том, как я об этом думаю?
2) Является ли это «наилучшей практикой» для выполнения этих операций?
Любая помощь приветствуется, дайте мне знать, если я что-то пропустил или необходимы какие-либо дополнительные разъяснения.