使用Pandas将CSV中每10行合并为1行的实现方法
解决方法
针对你的需求——按原顺序每10行合并为一行、扩展val列并生成新的连续ID,这里有一套适合新手的Pandas实现步骤:
步骤说明
- 先确保数据索引是连续的0开始整数(避免原行号干扰分组)
- 生成分组标识,把每10行划分为一组
- 对每个组的val列进行横向拼接,生成新的val1到val100列
- 用分组编号生成新的连续ID
完整代码
import pandas as pd # 假设你的原始数据存储在df中 # 第一步:重置索引为0开始的连续整数(如果原索引不是的话) df = df.reset_index(drop=True) # 第二步:生成分组标识,每10行一组 df['group'] = df.index // 10 # 第三步:定义函数,合并每组的val列 def merge_group_vals(group_data): # 提取所有val开头的列,转成一维数组(10行×10列 → 100个值) flattened_vals = group_data.filter(like='val').values.flatten() # 生成新的列名:val1 到 val100 new_val_cols = [f'val{i+1}' for i in range(len(flattened_vals))] # 返回合并后的Series return pd.Series(flattened_vals, index=new_val_cols) # 按分组处理数据,合并val列 merged_result = df.groupby('group').apply(merge_group_vals).reset_index() # 第四步:替换为新的连续ID,调整列顺序 merged_result = merged_result.rename(columns={'group': 'ID'}) merged_result['ID'] = merged_result['ID'] + 1 # 让ID从1开始 # 把ID列移到最前面,和示例结构一致 final_result = merged_result[['ID'] + [col for col in merged_result.columns if col != 'ID']]
关键细节解释
df.index // 10:利用整数除法自动把每10行归为一组,完全保留原数据的顺序,不会排序filter(like='val'):自动匹配所有以val开头的列,不管你有多少个val列(这里是val1到val10),都能正确提取values.flatten():把每组的10行val数据横向拼接成一行100个值,正好对应val1到val100的新列
这样处理后,你就能得到和示例一致的结果:5000行数据变成500行,每行对应原数据的10行,val列扩展到100个,ID是连续的1到500,完全符合你的需求。
内容的提问来源于stack exchange,提问作者BlueBoy
相关产品推荐
相关产品推荐

