По сути, я пытаюсь заполнить свои НС пропорционально количеству данных, которые у меня есть.
Например, если столбец из 100 наблюдений состоит из 10% яблок, 40% винограда и 50% НС, моя цель - заполнить 50 оставшихся столбцов 10 значениями «Apple» и 40 значениями «Виноград» наугад.
Если бы это было так просто, я бы просто подключил его вручную. Проблема в том, что мой реальный набор данных имеет 96 различных категориальных комбинаций, чтобы заполнить мои NA. Я хочу заполнить свои NA соответствующими средствами и сделать это пропорционально моим группировкам данных.
Чтобы продолжить пример с продуктовым магазином, мой код выглядит так:
Means = Groceries.groupby(["Produce","Store", "Brand", "Classification", "Customer"])["Price"].mean()
Proportions = Groceries.groupby(["Produce","Grocery Store", "Brand", "Classification", "Customer"])["Price"].count()/Groceries["Price"].count()
Groceries['Price Alt'] = Groceries['Price'].fillna(
pd.Series(np.random.choice([Means], p = [Proportions], size=len(Groceries))))
Я пытался используя df.values.tolist () и np.array (). Ни один из которых не работал. Все приводит к
ValueError (a должно быть одномерным)
Одна потенциальная проблема, которую я обнаружил, заключалась в том, что мои пропорции не складываются в 1, а в других В проектах, когда это происходило, в сообщении об ошибке указывалось, что мои пропорции не увеличиваются до 1.
Другая информация, если это помогает:
мои функции df.groupby () возвращают только то, что я могу описать как сходные деревья вероятностей - хотя среднее дерево дает средние значения, а не вероятности.
- Начальный сплит: 2 ветви (вегетарианское ie, фрукт)
- Второй сплит: 4 филиалы (Магазин 1, Магазин 2, Магазин 3, Магазин 4)
- Третий Сплит: 3 филиала (Бренд А, Бренд Б, Бренд C)
- Четвертый Сплит: 4 филиала (Органи c, ГМО, Ни то, ни другое)
- Пятый сплит: 4 ветви (Новая, Возвращение, Награды, Старшая программа)
предоставлено, если вы математически взяли комбинации для всех этих потенциальные группировки, было бы больше, чем 96. Из того, что я могу с через мои результаты не каждая ветка существует. Но я очень сомневаюсь, что это моя проблема. Я думаю, что это просто означает, что определенная комбинация пяти начальных категорий просто не существует для их подгрупп.
Я сделал это перед использованием набора данных Titani c и успешно заполнил свои NA. Но у меня было только 5 пропорций и 5 категорий для заполнения. Таким образом, я мог легко набирать их вручную.
Я знаю, что тип моих линий "Средство" и "Пропорции"
pandas .core.series.Series
Я также попытался преобразовать все в pd.DataFrames (), что тоже ничего не изменило. Я в основном нахожусь в точке, где я должен делать все вручную с помощью кода, подобного следующему:
pd.DataFrame(Groceries[(Groceries['Produce'] == "Fruit") & (Groceries['Store'] == "Store 1") &
(Groceries['Brand'] == "Brand A") & (Groceries['Classification'] == "Organic") & (Groceries['Customer'] == "New")])["Price"].mean()
И я бы систематически проходил через это 1057 * для всех 96 возможных результатов как для средних, так и для пропорций. НО я действительно хотел бы этого не делать.
Любая помощь и / или понимание будет высоко ценится. Спасибо за ваше время и за то, что поделились своими знаниями Я хотел бы извиниться за любые опечатки. Я сделал все возможное, чтобы вычитка была возможной.