Получить последнее значение из другого фрейма данных - PullRequest
0 голосов
/ 11 июля 2020

Мой первый фрейм данных

product=pd.DataFrame({
    'Product_ID':[101,102,103,104,105,106,107,101],
    'Product_name':['Watch','Bag','Shoes','Smartphone','Books','Oil','Laptop','New Watch'],
    'Category':['Fashion','Fashion','Fashion','Electronics','Study','Grocery','Electronics','Electronics'],
    'Price':[299.0,1350.50,2999.0,14999.0,145.0,110.0,79999.0,9898.0],
    'Seller_City':['Delhi','Mumbai','Chennai','Kolkata','Delhi','Chennai','Bengalore','New York']
})

Мой 2-й фрейм данных содержит транзакции

customer=pd.DataFrame({
    'id':[1,2,3,4,5,6,7,8,9],
    'name':['Olivia','Aditya','Cory','Isabell','Dominic','Tyler','Samuel','Daniel','Jeremy'],
    'age':[20,25,15,10,30,65,35,18,23],
    'Product_ID':[101,0,106,0,103,104,0,0,107],
    'Purchased_Product':['Watch','NA','Oil','NA','Shoes','Smartphone','NA','NA','Laptop'],
    'City':['Mumbai','Delhi','Bangalore','Chennai','Chennai','Delhi','Kolkata','Delhi','Mumbai']
})

Я хочу, чтобы цена из 1-го фрейма данных пришла в объединенный фрейм данных. Общий элемент - Product_ID. Обратите внимание, что для product_ID 101 есть 2 цены - 299,00 и 9898,00. Я хочу, чтобы последний входил в объединенный набор данных, то есть 9898.0 (поскольку это последняя цена)

В настоящее время мой код не дает правильного ответа. Это дает оба

customerpur = pd.merge(customer,product[['Price','Product_ID']], on="Product_ID", how = "left")
customerpur
    id  name    age Product_ID  Purchased_Product   City    Price
0   1   Olivia  20  101 Watch   Mumbai  299.0
1   1   Olivia  20  101 Watch   Mumbai  9898.0

Ответы [ 2 ]

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

В вашем фрейме данных нет индикатора последней записи, поэтому вам может потребоваться сначала удалить первую запись для id 101 из product фрейма данных следующим образом:

result_product = product.drop_duplicates(subset=['Product_ID'], keep='last')

Это будет оставьте последнюю запись на основе Product_ID, и вы можете выполнить слияние как:

pd.merge(result_product, customer, on='Product_ID')
1 голос
/ 11 июля 2020

Нет явной отметки времени, поэтому я предполагаю, что индекс - это порядок фрейма данных. Вы можете удалить дубликаты в конце:

customerpur.drop_duplicates(subset = ['id'], keep = 'last')

результат:

   id     name  age  Product_ID Purchased_Product       City    Price
1   1   Olivia   20         101             Watch     Mumbai   9898.0
2   2   Aditya   25           0                NA      Delhi      NaN
3   3     Cory   15         106               Oil  Bangalore    110.0
4   4  Isabell   10           0                NA    Chennai      NaN
5   5  Dominic   30         103             Shoes    Chennai   2999.0
6   6    Tyler   65         104        Smartphone      Delhi  14999.0
7   7   Samuel   35           0                NA    Kolkata      NaN
8   8   Daniel   18           0                NA      Delhi      NaN
9   9   Jeremy   23         107            Laptop     Mumbai  79999.0

Обратите внимание на аргумент keep = 'last', поскольку мы сохраняем только последнюю зарегистрированную цену. Дедупликацию следует выполнить перед объединением, если Юо заботится о производительности или наборе данных огромен:

product = product.drop_duplicates(subset = ['Product_ID'], keep = 'last')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...