Pandas分组后将含字符串与列表的列合并为扁平列表的问题
解决方法
你的问题核心是Col2列混合了字符串和列表类型,直接分组打包会把列表当作单个元素存入新列表,需要先统一格式再合并:
- 先将
Col2的每个元素转为列表格式:
# 把单字符串转成单元素列表,保留原列表结构,同时去掉字符串的单引号 df['Col2'] = df['Col2'].apply(lambda x: x if isinstance(x, list) else [x.strip("'")])
- 分组后展开合并嵌套列表:
# 用列表推导式展开所有子列表 result = df.groupby('Col1')['Col2'].apply(lambda x: [item for sublist in x for item in sublist])
执行后得到的结果如下:
Col1 A ['AD', 'FG', 'LKL'] B ['FGT'] Name: Col2, dtype: object
如果需要转为DataFrame格式,添加reset_index()即可:
result_df = result.reset_index()
输出的result_df为:
Col1 Col2 0 A ['AD', 'FG', 'LKL'] 1 B ['FGT']
也可以用链式写法简化操作:
result_df = (df .assign(Col2=df['Col2'].apply(lambda x: x if isinstance(x, list) else [x.strip("'")])) .groupby('Col1')['Col2'] .apply(lambda x: sum(x, [])) # sum嵌套列表等价于展开合并 .reset_index())
关键说明
- 必须先统一
Col2的元素格式,确保每个值都是列表,避免分组时把原列表当作单个元素。 sum(x, [])是合并嵌套列表的快捷写法,和列表推导式的效果完全一致。
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

