Переберите два кадра данных, сравните и измените значение в pandas или pyspark - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь выполнить упражнение в пандах.

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

Фрейм данных 1:

Article    Country   Colour    Buy
Pants      Germany   Red       0
Pull       Poland    Blue      0

Изначально все мои статьи имеютфлаг «Купить» установлен в ноль.У меня есть фрейм данных 2, который выглядит следующим образом:

Article    Origin    Colour   
Pull       Poland    Blue    
Dress      Italy     Red

Я хочу проверить, совпадают ли столбцы статьи, страны / происхождения и цвета (поэтому проверьте, могу ли я найти каждую статью из фрейма данных 1 в фрейме данных два) и, если это так, я хочу установить флаг 'Buy' в 1.

Я пытаюсь перебрать оба фрейма данных с помощью pyspark, но датафреймы pyspark не повторяются.Я думал о том, чтобы сделать это в пандах, но, по-видимому, это плохая практика для изменения значений во время итерации.

Какой код в pyspark или pandas будет работать, чтобы делать то, что мне нужно?

Спасибо!

1 Ответ

1 голос
/ 23 сентября 2019

merge с indicator, затем map значениями.Удостоверьтесь, что drop_duplicates на ключах слияния в правом фрейме, чтобы результат слияния всегда был той же длины, что и оригинал, и переименуйте, чтобы мы не повторяли ту же информацию после слияния.Нет необходимости иметь предварительно определенный столбец 0 с.

df1 = df1.drop(columns='Buy')
df1 = df1.merge(df2.drop_duplicates().rename(columns={'Origin': 'Country'}), 
                indicator='Buy', how='left')
df1['Buy'] = df1['Buy'].map({'left_only': 0, 'both': 1}).astype(int)

  Article  Country Colour  Buy
0   Pants  Germany    Red    0
1    Pull   Poland   Blue    1
...