如何高效为Pandas DataFrame中每个唯一Name生成对应Value值的列表?
高效实现按Name分组生成Value列表的方法
嘿,这个需求用Pandas自带的分组功能就能轻松搞定,而且效率拉满!我给你推荐两种最实用的高效方案:
方法一:groupby + agg(list) + to_dict(最简洁)
这是最直接也最推荐的写法,利用Pandas优化过的分组聚合能力,一行代码就能搞定:
import pandas as pd df = pd.DataFrame({ 'Name': ['Jim','Jack','Jim','Jack','Jim','Jack','Mick','Mick'], 'Day':[1,1,2,2,3,3,4,4], 'Value':[10,20,30,40,50,60,70,80], }) # 核心代码 name_value_dict = df.groupby('Name')['Value'].agg(list).to_dict()
执行后,name_value_dict就是你要的结果:
{'Jim': [10, 30, 50], 'Jack': [20, 40, 60], 'Mick': [70, 80]}
你可以直接通过键访问对应列表,比如name_value_dict['Jim']就能得到[10,30,50]。
方法二:字典推导式配合groupby(更直观)
如果你喜欢更清晰的遍历逻辑,也可以用字典推导式来实现,性能和第一种几乎没差:
name_value_dict = {name: group['Value'].tolist() for name, group in df.groupby('Name')}
为什么这两种方法高效?
Pandas的groupby底层是用C语言优化实现的,比你自己写Python循环(比如逐行遍历并手动append到列表)快得多,尤其是当你的DataFrame数据量很大的时候,这种性能差距会非常明显。
内容的提问来源于stack exchange,提问作者SOK
相关产品推荐
相关产品推荐

