Перевести CASE в Hive SQL на Python 3.6. - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь убрать все расширения из столбца, который содержит SKU продукта. Длина не постоянна. Единственное правило - три дефиса, например: 101-090-7612-02 На практике некоторые расширения начинаются с четвертого дефиса, а другие - с подчеркивания. например: 101-090-7612-02_love 101-090-762-02-Т

Мне удалось добиться этого с помощью Hive SQL:

(CASE WHEN sku RLIKE '_'
  THEN split(sku ,'[\_]')[0]
  ELSE concat(split(sku ,'[\-]')[0],'-',split(sku ,'[\-]')[1],
   '-',split(sku ,'[\-]')[2],'-',split(sku ,'[\-]')[3])
  END) AS new_sku

после этого я могу GROUP BY new_sku и получить все агрегированные показатели, такие как продажи, средняя цена продажи и т. Д.

Конечно, я сделаю .apply () функцию для фрейма данных ...

... Теперь я хочу перенести этот CASE в Python 3.

Большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 10 сентября 2018

вы можете создать функцию python, которая удалит нежелательный символ и применяет эту функцию к кадру данных.

d = {
    'sku': ["101-090-762-02-T", "101-090-7612-02_love"]

}

df = pd.DataFrame(data=d)
print df
new_df = df.applymap(lambda sku: "-".join(sku.split("_")[:-1]) if len(sku.split("-")) == 3 else "-".join(sku.split("-")[:-1]))
print new_df

Вы можете создать функцию для обработки этого и вызывать эту функцию.

def remove_ext(sku):
    temp = sku.split("-")
    return "-".join(sku.split("_")[:-1]) if len(temp) == 3 else "-".join(temp[:-1])


d = {
    'sku': ["101-090-762-02-T", "101-090-7612-02_love"]

}

df = pd.DataFrame(data=d)

print df
new_df = df.applymap(lambda x: remove_ext(x))
print new_df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...