как преобразовать индексы из DataFrame в данные?

Рейтинг: 0Ответов: 1Опубликовано: 01.02.2023

В местном магазине решили добавить анализ данных и каждый чек представлять в виде DataFrame.

Прайс-лист уже сформирован в виде объекта Series, где индексами являются названия, а значениями — цены.

Напишите функцию, cheque, которая принимает прайс-лист и список покупок в виде неопределённого количества именованных параметров (ключ — название товара, значение — количество).

Функция должна вернуть объект DataFrame со столбцами:

  • наименование продукта (product);
  • цена за единицу (price);
  • количество (number);
  • итоговая цена (cost). Строки чека должны быть отсортированы по названию продуктов в лексикографическом порядке.

Пример

Ввод
products = ['bread', 'milk', 'soda', 'cream']
prices = [37, 58, 99, 72]
price_list = pd.Series(prices, products)
result = cheque(price_list, soda=3, milk=2, cream=1)
print(result)
Вывод
product  price  number  cost
0   cream     72       1    72
1    milk     58       2   116
2    soda     99       3   297

мой код:

import pandas as pd


products = ['bread', 'milk', 'soda', 'cream']
prices = [37, 58, 99, 72]
price_list = pd.Series(prices, products)

def cheque(price_list, **kwargs):   
    d = {'price':price_list,  'number': kwargs }
    price = pd.DataFrame(d)
    price['cost'] = price['number'] * price['price']
    return price

print(cheque(price_list, soda=3, milk=2, cream=1))

Результат:

       price  number   cost
bread     37     NaN    NaN
cream     72     1.0   72.0
milk      58     2.0  116.0
soda      99     3.0  297.0

Ответы

▲ 0

Достаточно добавить .reset_index().rename(columns={'index':'product'}), где .reset_index() "переносит" индекс в столбец, а .rename() переименовывает этот столбец

return price.reset_index().rename(columns={'index':'product'})
  product  price  number   cost
0   bread     37     NaN    NaN
1   cream     72     1.0   72.0
2    milk     58     2.0  116.0
3    soda     99     3.0  297.0