выборочное построение нового фрейма данных с существующими фреймами в дополнение к расчету - PullRequest
0 голосов
/ 07 января 2019

Введите приведенный ниже код Pandas, чтобы создать новый DataFrame customer_spend, содержащий следующие столбцы в следующем порядке: customer_id, name и total_spend. total_spend - это новый столбец, содержащий сумму стоимости всех заказов, которые разместил конкретный клиент.

Я делаю онлайн-курс, связанный с Python Pandas. Как я писал выше, целью этого кода является создание нового фрейма данных под названием customer_spend со столбцами customer_id, name и total_spend.

У меня проблема в том, что создается фрейм данных только с частью двух разных существующих фреймов данных. Я попытался объединить, но он занимает каждый столбец существующих фреймов данных. Кроме того, у меня возникают проблемы с переименованием столбца в «total_spend».

import pandas as pd
import numpy as np

customers = pd.DataFrame([[100, 'Prometheus Barwis', 'prometheus.barwis@me.com',
    '(533) 072-2779'],[101, 'Alain Hennesey', 'alain.hennesey@facebook.com',
    '(942) 208-8460'],[102, 'Chao Peachy', 'chao.peachy@me.com',
    '(510) 121-0098'],[103, 'Somtochukwu Mouritsen',
    'somtochukwu.mouritsen@me.com','(669) 504-8080'],[104,
    'Elisabeth Berry', 'elisabeth.berry@facebook.com','(802) 973-8267']],
    columns = ['customer_id', 'name', 'email', 'phone'])
orders = pd.DataFrame([[1000, 100, 144.82], [1001, 100, 140.93],
   [1002, 102, 104.26], [1003, 100, 194.6 ], [1004, 100, 307.72],
   [1005, 101,  36.69], [1006, 104,  39.59], [1007, 104, 430.94],
   [1008, 103,  31.4 ], [1009, 104, 180.69], [1010, 102, 383.35],
   [1011, 101, 256.2 ], [1012, 103, 930.56], [1013, 100, 423.77],
   [1014, 101, 309.53], [1015, 102, 299.19]],
   columns = ['order_id', 'customer_id', 'order_total'])

combined = pd.merge(customers,orders, on='customer_id')
grouped = combined.groupby('customer_id')['order_total']
grouped.aggregate(np.sum).reset_index()

желаемый результат: фрейм данных с именем customer_spend со столбцами customer_id, name и total_spend. total_spend - это новый столбец, содержащий сумму order_total.

что у меня так далеко: только customer_id и order_total.

Я все еще новичок в этом сообществе. Если я делаю что-то неподобающее, пожалуйста, дайте мне знать. Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 января 2019
#Sorting so that data are consistent
customers = customers.sort_values(by = 'customer_id', ascending=True)

# Creating an empty DataFrame
customer_spend = pd.DataFrame(columns= 'customer_id,name,total_spend'.split(','))

#Filling columns details
customer_spend[['customer_id', 'name']] = customers[['customer_id', 'name']]
customer_spend['total_spend'] = orders.groupby('customer_id').sum().sort_values(by='customer_id', ascending=True)['order_total'].tolist()

Если слияние не обязательно, попробуйте это.

0 голосов
/ 07 января 2019

Рассмотрим сначала агрегирование orders по customer_id, а затем объединение результирующего customer_id -индексированного DataFrame в нужные столбцы customers:

cust2spend = orders.groupby('customer_id').sum()[['order_total']].reset_index()
cust2spend
customer_id     order_total
        100         1211.84
        101          602.42
        102          786.80
        103          961.96
        104          651.22

# Before merging, rename the order_total column to total_spend.
# Note that axis=1 could also be axis='columns'.
cust2spend.rename({'order_total': 'total_spend'}, axis=1, inplace=True)

pd.merge(customers[['customer_id', 'name']], cust2spend, on='customer_id')
   customer_id                   name  total_spend
0          100      Prometheus Barwis      1211.84
1          101         Alain Hennesey       602.42
2          102            Chao Peachy       786.80
3          103  Somtochukwu Mouritsen       961.96
4          104        Elisabeth Berry       651.22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...