Pandas的列表值处理技巧,避免过多循环加快处理速度(下)

简介: Pandas的列表值处理技巧,避免过多循环加快处理速度

此时,我们可以生成第一个有意义的可视化。

fig, ax=plt.subplots(figsize= (14,4))
ax.bar(to_1D(fruits["favorite_fruits"]).value_counts().index,
to_1D(fruits["favorite_fruits"]).value_counts().values)
ax.set_ylabel("Frequency", size=12)
ax.set_title("Children's Favorite Fruits", size=14)

640.png

图4 -显示所有水果的频率的条形图。

问题3:针对有唯一值的单独列

如果您对我们之前得到的结果感到满意,就到此为止吧。但是,您的研究目标可能需要更深层次的分析。也许您希望将所有列表元素相互关联以计算相似度得分。比如吃香蕉的孩子也喜欢芒果吗?或者你想知道哪些水果是大多数孩子最喜欢的水果。这些问题只能通过更深层次的分析才能得到答案。

为此,我将介绍两种有用的方法。它们的复杂性不同。

方法一

这是我偶然发现的一个非常简单快速的方法。而且它非常有用!您只需要一行代码。

fruits_expanded_v1=fruits["favorite_fruits"].apply(pd.Series)

640.png

图5 -使用方法1的水果列表的扩展版本

正如您所看到的,这单独生成了一个dataframe,每个列表都分为单个元素。有了这个方法,您将总是得到一个具有一个(n,len(lonsig_list))dataframe。在这种情况下,10个孩子中有两个叫了5个最喜欢的水果,结果是一个10x5dataframe

通过这个,我们就可以知道哪些水果是人们最喜欢的水果。

fruits_expanded_v1.iloc[:,0].value_counts(normalize=True)##OUTPUT##banana0.222222pear0.111111watermelon0.111111blueberry0.111111strawberry0.111111apple0.111111peach0.111111mango0.111111

我们可以看到香蕉是孩子们最喜欢的水果。

或者,我们可以以单个水果为目标,找出它们在列表的每个位置被命名的次数。这是我写的函数:

defget_rankings(item, df):
#Emptydictforresultsitem_count_dict= {}
#Foreverytagindfforiinrange(df.shape[1]):
#Calculate%ofcasesthattaggedtheitemval_counts=df.iloc[:,i].value_counts(normalize=True)
ifiteminval_counts.index:
item_counts=val_counts[item]
else:
item_counts=0#Addscoretodictitem_count_dict["tag_{}".format(i)] =item_countsreturnitem_count_dict

如果我们应用它,我们得到:

get_rankings(item="apple", df=fruits_expanded_v1)##OUTPUT##{'tag_0': 0.1111111111111111, 'tag_1': 0.1111111111111111, 'tag_2': 0.2222222222222222, 'tag_3': 0.2, 'tag_4': 0}

正如您所看到的,我们可以用这种方法进行大量的基于rpc的分析。然而,这种方法几乎没有其他用处。因为列不代表一个标记,而是一个级别,大多数在标签上的操作不能正确地完成。例如,计算香蕉和桃子之间的相关性是不可能的,我们从方法1得到了dataframe。如果这是你的研究目标,使用下一种方法。

方法二

这种方法更加复杂,需要更多的空间。其思想是,我们创建一个dataframe,其中的行与以前相同,但每个水果都被分配了自己的列。如果只有孩子#2命名为banana,那么banana列在第2行将具有“True”值,而在其他地方将具有“False”值(参见图6)。我写了一个函数来执行这个操作。它依赖于循环,这意味着它将花费大量时间处理大型数据集。然而,在我所尝试的所有方法中,这是最有效的方法。

defboolean_df(item_lists, unique_items):#Createemptydictbool_dict= {}
#Loopthroughallthetagsfori, iteminenumerate(unique_items):
#Applybooleanmaskbool_dict[item] =item_lists.apply(lambdax: iteminx)
#Returntheresultsasadataframereturnpd.DataFrame(bool_dict)

如果我们现在应用这个函数

fruits_bool=boolean_df(fruits[“favorite_fruits”], unique_items.keys())

我们得到这个表格:640.png


图6 - 布尔表格。

从这里,我们可以很容易地计算相关性。请注意,“相关性”并不是真正正确的术语,因为我们使用的不是度量或序数数据,而是二进制数据。

同样,有多种方法来关联这些水果。一个直接的方法是皮尔逊相关系数,它也可以用于二进制数据。Pandas对此有一个内置函数。

fruits_corr=fruits_bool.corr(method="pearson")

640.png

图7 -皮尔逊相关数据图

另一种方法是简单地数一种水果和其他水果一起被命名的次数。这可以用矩阵乘法来解决。为此,我们需要将布尔型1转换为整数。

fruits_int=fruits_bool.astype(int)

然后,我们可以计算频率。

fruits_freq_mat=np.dot(fruits_int.T, fruits_int)
##OUTPUT##array([[5, 3, 3, 2, 2, 1, 1, 1, 0, 2, 0, 1],
      [3, 4, 2, 1, 1, 1, 1, 2, 1, 0, 1, 1],
      [3, 2, 4, 3, 1, 2, 0, 0, 0, 1, 0, 0],
      [2, 1, 3, 4, 2, 2, 0, 0, 0, 1, 0, 0],
      [2, 1, 1, 2, 3, 1, 0, 0, 0, 1, 0, 0],
      [1, 1, 2, 2, 1, 3, 0, 0, 0, 0, 0, 0],
      [1, 1, 0, 0, 0, 0, 2, 1, 1, 0, 1, 1],
      [1, 2, 0, 0, 0, 0, 1, 2, 1, 0, 1, 1],
      [0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 2, 0],
      [2, 0, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0],
      [0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 2, 0],
      [1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1]])

现在我们需要做的就是添加标签并将其转换为dataframe

fruits_freq=pd.DataFrame(fruits_freq_mat, columns=unique_items.keys(), index=unique_items.keys())

640.png

图8 -频率数据表。

如果你正在寻找一个漂亮的可视化方式,你可以创建一个seaborn库热图。

importseabornassnfig, ax=plt.subplots(figsize= (9,5))
sn.heatmap(fruits_freq, cmap="Blues")
plt.xticks(rotation=50)
plt.savefig("heatmap.png", dpi=300)

640.png

图9 -热图。

利用皮尔逊矩阵,我们可以很容易地建立一个水果推荐系统。例如,如果你输入你喜欢香蕉,它会推荐你吃西番莲,因为这两者的相关性最高(0.67)。您会对这种简单的方法的强大程度感到惊讶。我已经成功地用过很多次了。如果您想对频率 dataframe做类似的事情,您需要首先对数据进行规范化。然而,这是另一篇文章的主题。

我希望这个指南对你有用,可以节省您的时间。谢谢大家的阅读!

目录
相关文章
|
6天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1630 116
|
7天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1112 5
|
13天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1954 9
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
7天前
|
编解码 人工智能 安全
2核4G/4核8G/8核16G阿里云服务器如何选择实例?经济型e、通用算力型u2i与计算型c9i选哪个?
本文介绍了阿里云2核4G、4核8G、8核16G三档主流配置下经济型e、通用算力型u2i和计算型c9i三种实例的最新活动价格与适用场景。同配置下三者价差显著,以2核4G为例,经济型e低至599.93元/年,计算型c9i则高达1742.08元/年。文章详细解析了各实例的性能定位:经济型e适合轻负载入门场景,u2i兼顾稳定算力与性价比,c9i凭借第9代至强处理器与芯片级安全能力支撑高性能业务。同时提示用户可叠加满减优惠券享受折上折,建议根据业务负载与预算综合决策。
539 112
|
19天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
2754 4
|
11天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
730 111
|
21天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2653 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
7天前
|
人工智能 JSON Shell
2026AI漫剧本地全开源方案(附各个软件模型链接),8G显卡也能流畅运行
这是一套完全本地化部署的AI漫剧生成技术链路:涵盖LLM剧本分镜生成、FLUX文生图(IP-Adapter人脸锁定)、StoryDiffusion时序连贯控制、LTX-2.3唇形同步视频生成,及ComfyUI全流程调度。零云端费用,仅耗硬件算力,单集2–4小时可产出竖屏短视频,适配抖音/B站分发。
|
5天前
|
人工智能 API 开发工具
2026 零基础本地 AI 漫剧完整实操教程(8G 笔记本显卡可用|附可直接复制命令与代码)
本方案提供完全离线、本地运行的漫剧全自动制作流程:RTX3060/4050 8G显卡即可驱动,涵盖Qwen写分镜→ComfyUI统一角色绘图→LTX2.3图生微动画→Qwen3-TTS本地配音→FFmpeg自动合成,全程无水印、免API、不限次。专为低显存优化,解决变脸、闪烁、爆内存三大痛点。(239字)

热门文章

最新文章