You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame指定列转为字典列表并按col1分组存入新列

基于col1合并DataFrame生成包含字典列表的列

原始DataFrame

col1 col2 col3
0     1    a    W
1     1    b    X
2     2    c    Y
3     2    d    Z

目标格式

col1 col2 col3                    dict_col
0     1    a    W  [{'col2': 'a', 'col3': 'W'}, {'col2': 'b', 'col3': 'X'}]
1     2    c    Y  [{'col2': 'c', 'col3': 'Y'}, {'col2': 'd', 'col3': 'Z'}]

尝试的代码

import pandas as pd

data = {
    'col1': [1, 1, 2, 2],
    'col2': ['a', 'b', 'c', 'd'],
    'col3': ['W', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)

print(df)

cols_to_use = ['col2','col3']

df['dict_col'] = df[cols_to_use].apply(
    lambda x: {'col2': x['col2'], 'col3': x['col3']},
    axis=1)

print(df)

解决方案

你已经完成了生成每行字典的步骤,接下来只需要按col1分组聚合字典列表,再处理成目标格式即可,这里提供两种简洁实现方式:

方式一:分组聚合后合并去重

import pandas as pd

data = {
    'col1': [1, 1, 2, 2],
    'col2': ['a', 'b', 'c', 'd'],
    'col3': ['W', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)

# 生成每行的字典,用to_dict更简洁通用
cols_to_use = ['col2','col3']
df['dict_col'] = df[cols_to_use].apply(lambda x: x.to_dict(), axis=1)

# 按col1分组,聚合得到每个组的字典列表
grouped_dict = df.groupby('col1')['dict_col'].agg(list).reset_index()

# 合并回原DataFrame,保留每个col1的第一行
result = df.merge(grouped_dict, on='col1', suffixes=('', '_group'))
result = result.drop_duplicates(subset='col1').drop(columns='dict_col').rename(columns={'dict_col_group': 'dict_col'})

print(result)

方式二:用transform广播后去重

import pandas as pd

data = {
    'col1': [1, 1, 2, 2],
    'col2': ['a', 'b', 'c', 'd'],
    'col3': ['W', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)

cols_to_use = ['col2','col3']
df['dict_col'] = df[cols_to_use].apply(lambda x: x.to_dict(), axis=1)

# 用transform将分组后的字典列表赋值给组内每一行
df['dict_col'] = df.groupby('col1')['dict_col'].transform(list)

# 去重,保留每个col1的第一行并重置索引
result = df.drop_duplicates(subset='col1').reset_index(drop=True)

print(result)

说明

  • x.to_dict()替代手动构造字典,当列名变化时无需修改代码,更通用
  • groupby.transform(list)可以把每个分组的字典列表批量赋值给组内所有行,省去合并步骤
  • drop_duplicates(subset='col1')确保每个col1只保留一行,符合目标格式要求

内容的提问来源于stack exchange,提问作者snn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:45:29