大熊猫:从不一致的行中整理数据

凯夫

我有一个输入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')
ky

考虑到excel的熊猫方法如下所示:

在此处输入图片说明

df= pd.read_excel(r'C:\path\excelfile.xlsx',sheet_name='Sheet_Name')
df=(df.groupby(df.key.ffill()).agg({'value':lambda x: ','.join(x),'other data':'first'})
                                                                .reset_index())

  key     value other data
0  k1  v1,v2,v3         d1
1  k2     v2,v5         d2
2  k3        v1         d3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章