前言:昨天获得一个数据处理的小需求,比较简单,用VBA也能做,不过最近Python用的比较多,所以用Python写了,效率也很快。
需求:
有一张总表,如下图所示
需要根据左侧的工号和姓名,合并右侧获奖情况,结果如下图
解决思路:
其实比较简单,在leetcode里应该是最简单的初级题目,但是考虑到时间复杂度,如果用两层循环遍历的话,数据量大起来效率会很低,所以我使用了Pandas里面的筛选功能,基本在4秒内就完成了整个数据处理工作(数据量1700条)
代码:
import pandas as pdimport warningswarnings.filterwarnings('ignore')huojiang = pd.read_excel('获奖.xlsx')huojiang = huojiang.drop_duplicates()new_word = huojiang[['工号', '姓名']]new_word = new_word.drop_duplicates().reset_index(drop=True)new_word['获奖'] = ''old_row = huojiang.shape[0]new_row = new_word.shape[0]print(huojiang.shape[0])print(new_word.shape[0])for i in range(new_row):temp_id = new_word.iloc[i, 0]temp_df = huojiang[huojiang['工号']==temp_id]temp_df['last'] = temp_df['奖励名称'] + '(' + temp_df['年份'] + ')'temp = temp_df['last'].to_list()new_text = ','.join(temp)print(new_text)new_word.loc[i, '获奖'] = new_textnew_word.to_csv('结果.csv', encoding='gbk', index=False)
Tips: 不过听说Power Query也能完成这项工作,有空的时候试试看