Pandas中的条件计数列,其中单独的字符串在多个列中匹配

时间:2019-03-19 17:54:07

标签: python string pandas conditional

我正在尝试重新创建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中复制它。答案就是自动化和学习。

我知道表和代码中的某些列不完全匹配,这仅仅是因为我缩短了表中的某些列以将其清理以进行发布。

0 个答案:

没有答案