Агрегация значений столбцов данных в новом кадре данных - PullRequest
0 голосов
/ 29 октября 2018

У меня есть фрейм данных, который включает в себя информацию о продавце, товаре, цене различных листингов на рынке среди других значений столбца.

Dataframe

Мне нужен фрейм данных, в котором в качестве разных столбцов указаны уникальные поставщики, количество продуктов, сумма их списков продуктов, средняя цена / продукт и (среднее * количество продаж).

Как то так -

Result

Какой лучший способ создать этот новый фрейм данных?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Сначала несколько столбцов Number of Sales с Price, затем используйте DataFrameGroupBy.agg по словарю имен столбцов с агрегатными функциями, затем выровняйте MultiIndex в столбцах на map и rename. :

df['Number of Sales'] *=  df['Price']

d1 = {'Product':'size', 'Price':['sum', 'mean'], 'Number of Sales':'mean'}
df = df.groupby('Vendor').agg(d1)
df.columns = df.columns.map('_'.join)
d = {'Product_size':'No. of Product',
     'Price_sum':'Sum of Prices',
     'Price_mean':'Mean of Prices',
     'Number of Sales_mean':'H Factor'
     }
df = df.rename(columns=d).reset_index()
print (df)
  Vendor  No. of Product  Sum of Prices  Mean of Prices  H Factor
0      A               4            121           30.25    6050.0
1      B               1             12           12.00    1440.0
2      C               2             47           23.50     587.5
3      H               1             45           45.00    9000.0
0 голосов
/ 29 октября 2018

Вы можете сделать это, используя pandas pivot_table . Вот пример, основанный на ваших данных.

import pandas as pd
import numpy as np

>>> f = pd.pivot_table(d, index=['Vendor', 'Sales'], values=['Price', 'Product'], aggfunc={'Price': np.sum, 'Product':np.ma.count}).reset_index()

>>> f['Avg Price/Product'] = f['Price']/f['Product']

>>> f['H Factor'] = f['Sales']*f['Avg Price/Product']

>>> f.drop('Sales', axis=1)

  Vendor  Price  Product  Avg Price/Product  H Factor
0      A    121        4              30.25    6050.0
1      B     12        1              12.00    1440.0
2      C     47        2              23.50     587.5
3      H     45        1              45.00    9000.0
0 голосов
/ 29 октября 2018

Вы можете сделать это с помощью groupby (), например:

df.groupby('Vendor').agg({'Products': 'count', 'Price': ['sum', 'mean']})

Это всего три столбца, а остальные вы можете решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...