我有一个这样的输入Excel电子表格:
key | value | other data
------------------------- ...
k1 | v1 | d1
| v2 |
| v3 |
k2 | v2 | d2
| v5 |
k3 | v1 | d3
值存储在一个空的空间中,除了value列,该行位于匹配键所在行的正下方,并且可以将任意数量的值绑定到该键,但是不太可能超过三个。所有键都是唯一的,“其他数据”可能会丢失或重复,大约有十二个值和数千个数据行。
我需要将输入表转换为以下格式:
k1 | v1,v2,v3 | d1 | ...
k2 | v2,v5 | d2 | ...
k3 | v1 | d3 | ...
我已经用openpyxl和简单的迭代算法解决了这个问题,我想知道是否有更优雅的方法可以使用Pandas的DataFrame操作工具来做到这一点?我搜索了Pandas数据操作教程,但是我发现大部分可以使用groupby()
和agg()
来解决,因为我没有专栏文章,因此我无法汇总,并且只能依赖于键一贯独特。
正面解决方案,我现在使用过:
import openpyxl
wb = openpyxl.load_workbook('in.xlsx')
ws = wb['Sheet1']
row_data = None
out_list = list()
i = 2
while i < ws.max_row + 1:
if ws[i][0].value is not None:
if row_data is not None:
out_list += [row_data]
row_data = list(ws[i])
else:
row_data[1].value = f'{row_data[1].value}' + f',{ws[i][1].value}'
i += 1
out_list += [list(ws[ws.max_row])] # append the last row to the output
wb_out = openpyxl.Workbook()
ws_out = wb_out.active
for row in out_list:
ws_out.append([cell.value for cell in row])
wb_out.save('out.xlsx')