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

如何将DataFrame中的值添加到字典内对应的另一个DataFrame中?

解决方案

先把你给出的示例数据明确下(方便复现调试):

import pandas as pd

# 初始化你的客户字典
cust_dict = {
    'ABC': pd.DataFrame(columns=['Date', 'Particulars', 'Vch No.', 'Outwards', 'Amount']),
    'BCD': pd.DataFrame(columns=['Date', 'Particulars', 'Vch No.', 'Outwards', 'Amount'])
}

# 初始化你的业务数据df
df = pd.DataFrame({
    'Date': ['2017-04-01 00:00:00', '2017-04-06 00:00:00', '2017-04-05 00:00:00'],
    'Particulars': ['ABC', 'BCD', 'ABC'],
    'Vch Type': ['Sales', 'Sales', 'Sales']
})

下面给你两种实用的实现思路,按需选择:

方法一:逐行遍历(适合小规模数据)

逻辑非常直观,就是遍历df的每一行,根据Particulars的值匹配字典里对应的DataFrame,把当前行的Date添加进去:

for _, row in df.iterrows():
    cust_name = row['Particulars']
    # 先检查字典里是否存在该客户,避免键不存在报错
    if cust_name in cust_dict:
        # 构造要插入的行数据,仅填充Date列,其他列留空
        new_row = pd.DataFrame({
            'Date': [row['Date']],
            'Particulars': [cust_name],  # 可选:如果需要保留客户标识可以加上
            'Vch No.': [None],
            'Outwards': [None],
            'Amount': [None]
        })
        # 用concat合并(替代即将弃用的append方法)
        cust_dict[cust_name] = pd.concat([cust_dict[cust_name], new_row], ignore_index=True)

执行完后,cust_dict['ABC']会包含两条Date记录,cust_dict['BCD']会有一条,完全符合你的需求。

方法二:分组批量处理(适合大规模数据)

如果你的业务数据量很大,逐行遍历效率会偏低,这时候可以先按客户分组,再批量更新字典里的DataFrame:

# 按Particulars分组,把每个客户的Date整理成列表
grouped_dates = df.groupby('Particulars')['Date'].apply(list).to_dict()

for cust_name, dates in grouped_dates.items():
    if cust_name in cust_dict:
        # 批量构造多行数据
        new_rows = pd.DataFrame({
            'Date': dates,
            'Particulars': [cust_name]*len(dates),
            'Vch No.': [None]*len(dates),
            'Outwards': [None]*len(dates),
            'Amount': [None]*len(dates)
        })
        cust_dict[cust_name] = pd.concat([cust_dict[cust_name], new_rows], ignore_index=True)

这种方法减少了循环次数,效率更高,最终结果和方法一完全一致。

小补充

  • 如果你不需要在子DataFrame里保留Particulars列(毕竟字典键已经是客户名了),可以直接去掉对应的列定义;
  • 要是不确定字典里是否存在所有客户的键,一定要保留if cust_name in cust_dict的判断,避免抛出KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:14:20