#python #sql #pandas #dataframe
Вопрос:
Я хочу задать концептуальный вопрос.
У меня есть стол, который выглядит так
UPC_CODE A_PRICE A_QTY DATE COMPANY_CODE A_CAT
1001 100.25 2 2021-05-06 1 PB
1001 2122.75 10 2021-05-01 1 PB
1002 212.75 5 2021-05-07 2 PT
1002 3100.75 10 2021-05-01 2 PB
Я хочу, чтобы для каждого кода UPC и кода КОМПАНИИ были собраны последние данные.
Для достижения этой цели у меня есть SQL и Python
Использование SQL:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY UPC_CODE, COMPANY_CODE ORDER BY DATE DESC) rn
FROM yourTable)
SELECT UPC_CODE, A_PRICE, A_QTY, DATE, COMPANY_CODE, A_CAT
FROM cte
WHERE rn = 1;
Использование Python:
df = df.groupby(['UPC_CODE','COMPANY_CODE']).
agg(Date = ('DATE','max'),A_PRICE = ('A_PRICE','first'),
A_QTY = ('A_QTY','first'),A_CAT = ('A_CAT','first').reset_index()
В идеале я должен получить следующую результирующую таблицу:
UPC_CODE A_PRICE A_QTY DATE COMPANY_CODE A_CAT
1001 100.25 2 2021-05-06 1 PB
1002 212.75 5 2021-05-07 2 PT
Однако, используя SQL, я получаю вышесказанное, но это не относится к Python.
Чего мне здесь не хватает?
Комментарии:
1. @Ваграм Даниен : Пожалуйста, уточните.
Ответ №1:
upc_code
и date
столбцы могут использоваться вместе rank(method='first',ascending = False)
, например , в порядке убывания при определении первых строк, применяемая dataframe.groupby()
функция после преобразования date
столбца в тип даты и времени в Python, чтобы отфильтровать соответствующие строки со значением = 1 для df['rn']
df['date']=pd.to_datetime(df['date'])
df['rn']=df.groupby('upc_code')['date'].rank(method='first',ascending = False)
print(df[df['rn']==1])