将 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 字典中搜索匹配的数据框值,然后更新数据框?