как использовать Numpy Функция случайного выбора для пропорционального заполнения NA в DataFrame ~ сообщение об ошибке: ValueError (a должно быть 1-мерным) - PullRequest
0 голосов
/ 01 марта 2020

По сути, я пытаюсь заполнить свои НС пропорционально количеству данных, которые у меня есть.

Например, если столбец из 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 возможных результатов как для средних, так и для пропорций. НО я действительно хотел бы этого не делать.

Любая помощь и / или понимание будет высоко ценится. Спасибо за ваше время и за то, что поделились своими знаниями Я хотел бы извиниться за любые опечатки. Я сделал все возможное, чтобы вычитка была возможной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...