Я пытаюсь создать портфель ios в фреймах данных зависел от переменной 'scope', оставляя строки с наивысшими 33% значений области видимости в первом портфеле в фрейме данных, средние 34% во втором и нижнем 33% в третьем для каждого периода времени и отрасли.
До сих пор я группировал данные по дате и отрасли
group_first = data_clean.groupby(['date','industry'])
и впоследствии использовал лямбда-функцию для получения строк первый термин «область действия» для каждой даты и отрасли; например:
port = group_first.apply(lambda x: x[x['scope'] <= x.scope.quantile(0.33)]).reset_index(drop=True)
Это работает для первого и третьего терциля, но не для среднего, потому что я получаю
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
, помещая два условия в лямбда-функцию, как это :
group_middle = data_clean.groupby(['date','industry'])
port_middle = group_middle.apply(lambda x: (x[x['scope'] > x.scope.quantile(0.67)]) and (x[x['scope'] < x.scope.quantile(0.33)])).reset_index(drop=True)
Другими словами, как я могу получить строки кадра данных, содержащие значения в области видимости между 33-м и 67-м процентилем после группировки по дате и отрасли?
Любой идея как это решить?