Столбец условного подсчета в Pandas, где отдельные строки совпадают в нескольких столбцах - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь воссоздать этот отчет, который у меня есть в Excel:

Dealer  Net NetSold NetRatio Phone PhSold PhRatio WalkIn WInSold WInRatio
Ford    671   31     4.62%    127    21    16.54%   93    24    25.81%
Toyota  863   37     4.29%    125    39    31.20%   97    32    32.99%
Chevy   826   67     8.11%    160    41    25.63%  224   126    56.25%
Dodge  1006   55     5.47%    121    28    23.14%  242    87    35.95%
Kia     910   57     6.26%    123    36    29.27%  202    92    45.54%
VW     1029   84     8.16%    316    65    20.57%  329   148    44.98%
Lexus  1250   73     5.84%    137    36    26.28%  138    69    50.00%
Total  6555  404     6.16%   1109   266    23.99% 1325   578    43.62%

Из CSV, который выглядит следующим образом:

Dealer LeadType LeadStatusType
Chevy  Internet  Active
Ford   Internet  Active
Ford   Internet  Sold
Toyota Internet  Active
VW     Walk-in   Sold
Kia    Internet  Active
Dodge  Internet  Active

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

Я смог приблизиться к тому месту, которое, как мне кажется, мне нужно, с помощью следующего:

lead_counts = df.groupby('Dealer')['Lead Type'].value_counts().unstack()

, что, конечно, дает красивые данные, суммирующиеприводит по типу.Проблема в том, что мне теперь нужно вставить вычисляемые столбцы на основе других полей.Например: для каждого дилера подсчитайте количество лидов, которые являются LeadType = 'Internet' И LeadStatusType = 'Sold'.

Я честно перепробовал столько вещей, что не смогузапомнить их все.

def leads_by_type(x):
    for dealer in dealers:
        return len(df[(df['Dealer'] == dealer) &(df['Lead Type'] == 'Internet') & (df['Lead Status Type'] == 'Sold')]) 

Попробовал что-то вроде этого, где я могу надежно получить данные, которые я ищу, но я не могу понять, применить ли это к столбцу.

Я просто попробовал:

lead_counts['NetSold'] = len(df[(df['Dealer'] == dealer) &(df['Lead Type'] == 'Internet') & (df['Lead Status Type'] == 'Sold')])

Любой совет, как поступить, или я уже поступаю по этому поводу неправильно?Это все очень выполнимо в Excel, и меня часто спрашивают, почему я пытаюсь повторить это в Python.Ответ - просто автоматизация и обучение.

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

...