gpt4 book ai didi

python - Pandas:扁平化不一致行中的数据

转载 作者:行者123 更新时间:2023-12-01 00:54:28 26 4
gpt4 key购买 nike

我有一个像这样的输入 Excel 电子表格:

key  | value | other data
------------------------- ...
k1 | v1 | d1
| v2 |
| v3 |
k2 | v2 | d2
| v5 |
k3 | v1 | d3

除了值列之外,值存储在空的行中,该行位于具有匹配键的行的正下方,并且可以有任意数量的值绑定(bind)到键,但不太可能超过三个。所有键都是唯一的,“其他数据”可能丢失或重复,大约有十几个值和数千个数据行。

我需要将输入表转换为以下格式:

k1   | v1,v2,v3 | d1 | ...
k2 | v2,v5 | d2 | ...
k3 | v1 | d3 | ...

我已经用 openpyxl 和一个简单的迭代算法解决了这个问题,我想知道是否有一种更优雅的方法来使用 Pandas 的 DataFrame 操作设施来做到这一点?我搜索了 Pandas 数据操作教程,但我能找到的大部分内容都使用 groupby()agg() 这似乎不是我的情况,因为我没有专栏可以聚合并且只能依赖于 key 始终是唯一的。

正面解决方案,我现在使用:

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')

最佳答案

考虑到 Excel 的 pandas 执行此操作的方式如下所示:

enter image description here

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

关于python - Pandas:扁平化不一致行中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com