按唯一id合并DataFrame的A、B列为浮点型嵌套列表列C
按ID合并A、B列为嵌套浮点列表的解决方案
你需要的是按id分组,将每组内的A、B值对合并成嵌套的浮点列表,而不是给每行生成元组列。这里有两种实用的实现方法:
方法1:分组后用列表推导生成嵌套结构
import pandas as pd # 初始化你的DataFrame(如果已有可跳过) df = pd.DataFrame({ 'ordinal': [1,2,3,4,5], 'id': [14318]*5, 'A': [45.0714,45.0739,45.0745,45.0833,45.0946], 'B': [7.6187,7.6195,7.6152,7.6145,7.6194] }) # 核心逻辑:按id分组,把每组的A/B转成嵌套列表 result_df = df.groupby('id').apply( lambda group: [[a, b] for a, b in zip(group['A'].astype(float), group['B'].astype(float))] ).reset_index(name='C') print(result_df)
输出结果完全符合你的需求:
id C 0 14318 [[45.0714, 7.6187], [45.0739, 7.6195], [45.0745, 7.6152], [45...
方法2:先构造单行列表再聚合(更高效)
如果数据量较大,这种方法性能更优:
# 先给每行生成[A,B]的浮点列表 df['pair'] = df.apply(lambda row: [float(row['A']), float(row['B'])], axis=1) # 按id分组,把所有pair列表聚合为一个大列表 result_df = df.groupby('id')['pair'].agg(list).reset_index(name='C')
原代码的问题分析
你之前的df['C'] = list(zip(df.A.astype(float), df.B.astype(float)))只是给每行生成了一个元组列,没有做分组聚合——所以得到的是每行对应一个元组,而不是同一个id下的所有值对合并成一个大列表。上面的两种方法都完成了「分组+聚合嵌套列表」的核心需求。
内容的提问来源于stack exchange,提问作者Mamed
相关产品推荐
相关产品推荐

