Python Pandas Группировка со значениями «Итого» на выходе? - PullRequest
0 голосов
/ 23 апреля 2020

Я действительно новичок в python, и у меня возникли некоторые трудности с упрощением моих шагов по созданию «значения промежуточного итога» при использовании функции pandas groupby на исходном фрейме данных ['Product', 'Customer'].

Пожалуйста, помогите предложить любые указатели и решения. Спасибо!

# Desired Output
Product Customer    Qty
Item A  Cust1       5
        Cust4       10
        Subtotal    15
Item B  Cust1       15
        Cust2       5
        Cust6       1
        Subtotal    21
Item C  Cust3       1
        Subtotal    1

# Source Dataframe
    Product Customer  Qty
0   Item A  Cust1     5
1   Item A  Cust4     10
2   Item B  Cust1     15
3   Item B  Cust2     5
4   Item B  Cust6     1
5   Item C  Cust3     1

# Source Dataframe code
source_df = pd.DataFrame({
    'Product'  : ['Item A', 'Item A', 'Item B', 'Item B','Item B', 'Item C'],
    'Customer' : ['Cust1', 'Cust4', 'Cust1', 'Cust2', 'Cust6', 'Cust3'],
    'Qty'      : [5,10,15,5,1,1]
})

Мое собственное решение:

  1. Создайте промежуточную группу данных по элементу «Продукт» и объедините «Кол-во» со столбцом, заполненным строковыми значениями «Итого» * ​​1009 *
  2. Конкатенация исходного и промежуточного фрейма данных
  3. Еще раз выполнить групповую обработку на ['Product', 'Customer'], чтобы получить желаемый результат

Не работает, если клиент имя начинается с буквы после 'S', поскольку оно может быть отсортировано ниже 'Итого'.

# Intermediate Subtotal Dataframe
    Product Customer    Qty
0   Item A  Subtotal    15
1   Item B  Subtotal    21
2   Item C  Subtotal    1

1 Ответ

0 голосов
/ 23 апреля 2020

Я часто сталкиваюсь с этой проблемой в своем рабочем процессе. Одна вещь, которую вы можете сделать, это отчасти хакерская, но работает - использовать «[Итог]» вместо «Итог» Скобки вокруг него отсортируют его правильно для вас.

Здесь я уже задавал и отвечал на подобные вопросы раньше.

ссылка 1

ссылка 2

...