Python Pandas动态合并DataFrame连续多行的实现难题
动态合并CSV中同一ID对应的多行Stock数据(Pandas实现)
核心思路
先把CSV按文本行读取,以ID行作为分组标记,将每个ID对应的所有Stock行归为一组,再把每组的Stock值合并成列表,最后转换为DataFrame——完全适配任意数量的Stock行,不再受固定步长限制。
样例输入(CSV内容)
ID,1001
Stock,AAPL
Stock,MSFT
ID,1002
Stock,GOOG
Stock,AMZN
Stock,TSLA
预期输出
ID Stock 0 1001 [AAPL, MSFT] 1 1002 [GOOG, AMZN, TSLA]
实现代码
import pandas as pd # 读取CSV为文本行列表,过滤空行 with open('your_file.csv', 'r') as f: lines = [line.strip() for line in f if line.strip()] # 按ID行分组,自动适配任意数量的Stock行 groups = [] current_group = [] for line in lines: if line.startswith('ID,'): if current_group: groups.append(current_group) current_group = [line] else: current_group.append(line) # 保存最后一组数据 if current_group: groups.append(current_group) # 处理每组数据,提取ID和合并Stock列表 processed_rows = [] for group in groups: # 从ID行提取ID值 id_value = group[0].split(',')[1] # 提取所有Stock值并转为列表 stocks = [row.split(',')[1] for row in group[1:]] processed_rows.append({'ID': id_value, 'Stock': stocks}) # 转换为DataFrame result_df = pd.DataFrame(processed_rows) print(result_df)
关键细节说明
- 分组逻辑:通过判断行是否以
ID,开头来切换分组,不管当前ID对应2行还是3行Stock,都会被自动归入同一组,彻底解决固定步长的问题。 - 灵活适配:如果你的CSV中ID的标识不是
ID,(比如用户ID,),只需要修改line.startswith('ID,')里的字符串即可;如果分隔符不是逗号,调整split(',')的参数。 - 空行处理:读取时过滤了空行,避免分组时出现无效数据。
内容的提问来源于stack exchange,提问作者DBGGHOST
相关产品推荐
相关产品推荐

