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

Pandas按Product与Code分组填充Supplier非空值时触发ValueError求助

解决Pandas分组填充缺失值的ValueError问题

错误原因

你的代码触发ValueError: Must specify a fill 'value' or 'method',是因为部分分组的supplier列没有非空值,调用first()后得到的是NaN,此时用fillna(NaN)相当于没有提供有效填充值,导致报错。比如apple+Code=2的分组,所有supplier都是空值,就会出现这种情况。

修正方案

使用transform直接对分组进行处理,同时判断分组是否存在非空值,避免无效填充:

import pandas as pd

# 创建示例数据
test = pd.DataFrame({
    'product': ['apple', 'apple', 'apple','apple','banana', 'banana', 'orange', 'orange','orange'],
    'Code': [1,2,1,1,3,3,4,5,4],
    'supplier': [None, None, None, 'Acme Inc.', 'Cotsco ', None, None, 'Target', None],
    'quantity': [99,58,100, 200, 150, 50, 300, 20,400]
})

# 按product和Code分组,用每组第一个非空值填充组内缺失
test['supplier'] = test.groupby(['product', 'Code'])['supplier'].transform(
    lambda x: x.fillna(x.dropna().iloc[0]) if not x.dropna().empty else x
)

print(test)

代码说明

  • transform方法会对每个分组执行操作,并返回与原DataFrame长度匹配的结果,无需额外合并步骤
  • 先通过x.dropna().empty判断分组是否存在非空值:
    • 若存在非空值,取第一个非空值(x.dropna().iloc[0])填充组内所有缺失
    • 若不存在非空值,保留原缺失值,避免触发填充无效的错误

运行结果

product  Code    supplier  quantity
0    apple     1  Acme Inc.        99
1    apple     2        None        58
2    apple     1  Acme Inc.       100
3    apple     1  Acme Inc.       200
4   banana     3   Cotsco        150
5   banana     3   Cotsco         50
6   orange     4       None       300
7   orange     5      Target        20
8   orange     4       None       400

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:15:32