Понимание сложного однострочного кода - Анализ набора данных о продажах Big Mart - PullRequest
1 голос
/ 10 июля 2020

Я пытался научиться анализировать Набор данных о продажах Big Mart с этого веб-сайта . Я не могу расшифровать строку кода, которая немного сложна. Я пытался понять это демистифицировать, но не смог. Пожалуйста, помогите мне понять эту строку в

В [26]

df['Item_Visibility_MeanRatio'] = df.apply(lambda x: x['Item_Visibility']/visibility_item_avg['Item_Visibility'][visibility_item_avg.index == x['Item_Identifier']][0],axis=1).astype(float)

Заранее большое спасибо. Удачного кодирования

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Давайте go пошагово проходим его:

df['Item_Visibility_MeanRatio']

Эта часть создает столбец во фрейме данных, и его имя Item_Visibility_MeanRatio.

df.apply(lambda...)

Применить функция вдоль оси фрейма данных.

x['Item_Visibility']

Она получает данные из Item_Visibility столбца в фрейме данных.

visibility_item_avg['Item_Visibility'][visibility_item_avg.index == x['Item_Identifier']][0]

Эта часть находит индексы, которые visibility_item_avg индекс равен df['Item_Identifier']. Это приведет к списку. Затем он получит элементы в visibility_item_avg['Item_Visibility'], индекс которых равен тому, что было найдено в предыдущей части. [0] в конце - найти первый элемент результирующего массива.

axis=1

1: применить функцию к каждой строке.

astype(float)

Это предназначен для изменения типов значений на float. Чтобы код было легко захватить, вы всегда можете разделить его на отдельные части и постепенно переваривать.

Чтобы ускорить код, вы можете выполнить векторизацию вместо применения лямбда. По ссылке здесь .

1 голос
/ 10 июля 2020
df['Item_Visibility_MeanRatio'] 

Это новое имя столбца

= df.apply(lambda x: 

применение функции к фрейму данных

x['Item_Visibility'] 

взять столбец Item_Visibility из исходного фрейма данных

/visibility_item_avg['Item_Visibility'][visibility_item_avg.index == x['Item_Identifier']][0] 

разделить, где столбец Item_Visibility в новой сводной таблице, где Item_Identifier равен Item_Identifier в исходном фрейме данных

,axis=1) 

применить вдоль столбцов (по горизонтали)

.astype(float) 

преобразовать в тип с плавающей запятой

Кроме того, похоже, что .apply часто используется в прикрепленной вами ссылке. Следует отметить, что apply, как правило, является медленным способом решения задач, и обычно есть альтернативы, которых следует избегать использования apply.

...