遍历DataFrame并更新字典:统计出现次数及更新属性
DataFrame转含最新属性与计数的字典解决方案
原始数据结构
import pandas as pd df=pd.DataFrame({'Name':['A','B','C','A'], 'ID':['a1','b1','c1','a1'], 'Age':[15,16,32,18]})
期望输出字典
dic={'Name':['A','B','C'], 'ID':['a1','b1','c1'], 'Age':[18,16,32], 'Count':[2,1,1]}
需求要点
- 统计每个
Name的出现次数,新增Count字段 - 每个
Name对应的Age保留最后一次出现的最新值(比如'A'的Age更新为最后一次的18) ID保留每个Name对应的唯一值
你尝试的代码(仅实现计数,未处理其他属性)
dic={} for i in list(df['Security Name']): if i not in dic['Name']: dic[i]=1 else: dic[i]+=1
两种可行解决方案
方案一:用pandas分组实现(高效推荐)
利用groupby直接完成分组统计、取最新值的操作,再转为目标字典:
import pandas as pd # 分组聚合:取ID(唯一值用first/last都可)、最后一次的Age、统计数量 grouped_result = df.groupby('Name').agg( ID=('ID', 'first'), Age=('Age', 'last'), Count=('Name', 'size') ).reset_index() # 转换为目标字典格式 dic = grouped_result.to_dict('list') print(dic)
运行后输出完全符合期望。
方案二:手动遍历实现(贴合你的初始思路)
通过临时字典存储每个Name的详细信息,遍历过程中更新计数和最新Age,最后整理成目标格式:
import pandas as pd df=pd.DataFrame({'Name':['A','B','C','A'], 'ID':['a1','b1','c1','a1'], 'Age':[15,16,32,18]}) temp_store = {} # 逐行遍历处理 for _, row in df.iterrows(): name = row['Name'] if name not in temp_store: # 首次出现时初始化信息 temp_store[name] = { 'ID': row['ID'], 'Age': row['Age'], 'Count': 1 } else: # 重复出现时更新计数和最新Age temp_store[name]['Count'] += 1 temp_store[name]['Age'] = row['Age'] # 整理成目标字典结构 dic = { 'Name': list(temp_store.keys()), 'ID': [val['ID'] for val in temp_store.values()], 'Age': [val['Age'] for val in temp_store.values()], 'Count': [val['Count'] for val in temp_store.values()] } print(dic)
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

