将 Pandas 数据框值保存在给定条件的字典中

Posted

技术标签:

【中文标题】将 Pandas 数据框值保存在给定条件的字典中【英文标题】:save Pandas dataframe values in a dictionary given criteria 【发布时间】:2015-06-19 08:38:57 【问题描述】:

我有一个pandas df,其中包含访问者的数量以及他们在完成转化目标之前选择的路径。每行代表路径和选择路径的访问者数量,例如,row1: 18 访问者在到达目标目标之前访问了 '(entrance)' --> '/' --> '/ContactUS'/Default.aspx'

我只对访问者最后访问的产品页面感兴趣,我正在尝试创建一个以产品名称为关键字的字典,例如“VFB25AEH”作为键,访问次数作为值

Step1                        Step2                  Step3              Visits 
/ContactUs/Default.aspx        /                    (entrance)          18    
/Products/GBR100L.aspx  /Products/VFB25AEH.aspx   /Products/RAD80L.aspx  9    
/Products/VFB25AEH.aspx  (entrance)                 (not set)            5    
/Products/RAD80L.aspx    (entrance)                 (not set)            4

以下是我的代码,循环遍历每一行的每一列,并保存第一个产品页面(包含'/Products/'的步骤)并将总访问次数保存在字典中

result = 
for i, row in enumerate(df.values):
    for c in row:
        if 'products' in str(c).lower():
            c = c.strip('.aspx').split('/')[2]
            if c in result:
                result[c]+= 1
            result[c] = 1

理想结果是 - result['VFB25AEH'] = 5, result['RAD80L'] = 4, result['GBR100L']=9

但是,结果中的值都是'1'。有人可以帮忙指出这里的错误吗?

【问题讨论】:

我注意到(与下面我的回答中详述的问题不同)您的代码实际上并没有总结访问次数,而只是计算特定产品 ID 在数据框中出现的次数.这是你的本意吗? 您好,感谢您的快速回复!我的目的是总结特定 ID 的访问次数。我只对每行中出现的最后一个产品 ID / 产品页面感兴趣(如果有的话)(step1 表示目标之前的上一页,step2 表示目标之前的第二个上一页) 【参考方案1】:

代码的最后 3 行将 result[c] 重置为 1 每次迭代。相反,您需要:

if c in result:
    result[c] += 1
else:
    result[c] = 1

您也可以使用collections.defaultdict

import collections

result = collections.defaultdict(int)
for i, row in enumerate(df.values):
    for c in row:
        if 'products' in str(c).lower():
            c = c.strip('.aspx').split('/')[2]
            result[c] += 1

编辑

考虑到总访问次数的要求,只考虑最近访问的产品页面:

import collections

result = collections.defaultdict(int)
for row in df.values:
    for c in row:
        if 'products' in str(c).lower():
            c = c.strip('.aspx').split('/')[2]

            # The number of visits is in the last entry in the row
            result[c] += row[-1]

            # We've found the most recent product page, so move on to the next row
            break

您实际上不需要调用enumerate() - 您根本没有使用索引。

【讨论】:

谢谢!代码有效!但数字有点偏。不知道为什么。

以上是关于将 Pandas 数据框值保存在给定条件的字典中的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套的 Python 字典中搜索匹配的数据框值,然后更新数据框?

Pandas Dataframe 将我的字典变成了字符串

从 csv 中提取列中的数据,保存为字典(Python、Pandas)

根据特定条件和输入字典生成数据框 - pandas

将 JSON 行解包到 pandas 数据框

我在尝试将 winforms 文本框值保存到连接的 MS 访问数据库时出错