利用Python做excel文本合并(根据左侧单元格,快速合并右侧单元格内容)

前言:昨天获得一个数据处理的小需求,比较简单,用VBA也能做,不过最近Python用的比较多,所以用Python写了,效率也很快。

需求:
有一张总表,如下图所示
在这里插入图片描述
需要根据左侧的工号和姓名,合并右侧获奖情况,结果如下图
在这里插入图片描述

解决思路:
其实比较简单,在leetcode里应该是最简单的初级题目,但是考虑到时间复杂度,如果用两层循环遍历的话,数据量大起来效率会很低,所以我使用了Pandas里面的筛选功能,基本在4秒内就完成了整个数据处理工作(数据量1700条)

代码:

import pandas as pd
import warnings

warnings.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_text

new_word.to_csv('结果.csv', encoding='gbk', index=False)

Tips: 不过听说Power Query也能完成这项工作,有空的时候试试看

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值