使用Python的Pandas合并行数据:配方系统CSV生成需求
解决配方系统数据合并问题
看起来你需要把同一厂商(Manufacturer)和产品(Product)的多行数据合并成一行,将Data1-3的内容依次拼接,不足的位置补0。下面是用Pandas实现的具体方案,应该能完美匹配你的需求:
步骤说明与代码实现
假设你已经用Pandas读取了原始数据并存储在df这个DataFrame中,我们可以按以下步骤处理:
分组并收集所有Data列的值
先按Manufacturer和Product分组,把每组里的Data1、Data2、Data3按行顺序拼接成一个扁平化的列表:# 分组后将每组的Data1-3转为扁平化列表 grouped = df.groupby(['Manufacturer', 'Product']).apply( lambda x: x[['Data1', 'Data2', 'Data3']].values.flatten().tolist() ).reset_index(name='combined_data')确定最大需要的列数
找到所有组中最长的combined_data长度,确保所有行的列数统一,不足的位置用0填充:max_length = grouped['combined_data'].apply(len).max()补0并拆分列表为多列
把每个组的combined_data补0到max_length长度,再拆分成单独的列,最后和厂商、产品列合并:# 给短列表补0到最大长度 grouped['combined_data'] = grouped['combined_data'].apply( lambda lst: lst + [0]*(max_length - len(lst)) ) # 将列表拆分为多列 expanded_data = pd.DataFrame(grouped['combined_data'].tolist(), index=grouped.index) # 合并分组信息和展开的数据 final_df = pd.concat([grouped[['Manufacturer', 'Product']], expanded_data], axis=1)导出为目标CSV
最后把处理好的数据导出为CSV文件,如果你需要空格分隔(和你示例格式一致),可以指定分隔符:# 空格分隔,不保留索引和默认表头 final_df.to_csv('merged_recipes.csv', index=False, header=False, sep=' ')
测试验证
用你提供的测试数据运行代码后,输出的CSV内容会和你期望的完全一致:
Test 1 Product 1 1 2 3 0 0 0 0 0 0 Test 1 Product 2 4 5 6 0 0 0 0 0 0 Test 2 Product 1 1 2 3 0 0 0 0 0 0 Test 3 Product 1 1 2 3 4 5 6 7 8 9
如果需要调整列名、分隔符或者其他细节,随时调整代码参数即可!
内容的提问来源于stack exchange,提问作者Lee Moss
相关产品推荐
相关产品推荐

