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

Pandas如何将多个字典列表合并为包含多字典的单一列表

解决方案

你不需要手动拆分分组、循环计算后再拼接结果,pandas原生支持分组内的移位计算,直接在原DataFrame上完成运算后一次性导出即可,代码更简洁还能避免索引、警告类问题。

推荐写法(无循环,性能最优)

直接调用groupby().shift()完成组内移位计算,算完直接转目标列表:

import pandas as pd

# 初始化示例数据
d = {'ids': [100, 200, 100, 200, 200, 100, 300, 300], 'col': [1, 2, 3, 4, 5, 6, 7, 8], 'col2': [6, 5, 4, 3, 2, 1, 10, 15]}
df = pd.DataFrame(data=d)

# 按ids分组,组内取col列的上一行值
df['previous_col'] = df.groupby('ids')['col'].shift()
# 计算新列
df['new_col'] = df['col2'] * df['previous_col']

# 一次性导出为单一字典列表
result = df.to_dict('records')

如果需要结果按ids分组排序,在转records前加一行df = df.sort_values('ids')即可,输出和你预期的格式完全一致。

兼容原有循环逻辑的写法

如果你不想改动现有循环计算的逻辑,只需要在循环外初始化一个空列表,每次循环把当前分组的字典列表追加到总列表即可:

groups = {key: df.loc[value] for key, value in df.groupby("ids").groups.items()}
result = []
for key, group in groups.items():
    group['previous_col'] = group['col'].shift()
    group['new_col'] = group['col2'] * group['previous_col']
    # 追加当前分组的所有记录到总列表
    result.extend(group.to_dict('records'))

注意:直接对分组切片后的group赋值新列会触发pandas的SettingWithCopyWarning,生产环境优先使用第一种写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:51:22