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

Pandas按size分组合并含字典值的行如何避免字典转为NaN

问题原因

你使用df.groupby(by=['size']).max()得到NaN是因为pandas内置的数值聚合函数(max、min、mean等)不支持字典类型的object列的聚合运算,会直接返回空值。

解决方案

你可以自定义聚合逻辑,对每个size分组下的每一列,取分组内的非空值即可,适配你场景下「同一size分组的同一列最多只有一个非空字典值」的情况,代码示例如下:

import pandas as pd

# 构造示例DataFrame
data = [
    [1.5, {'val':1.1, 'id': 10}, None],
    [2.0, {'val':1.1, 'id': 11}, None],
    [3.0, {'val':1.1, 'id': 20}, None],
    [3.0, None, {'val':1.1, 'id': 6}]
]
df = pd.DataFrame(data, columns=['size', 'col1', 'col2'])

# 按size分组,每列取分组内第一个非空值
res = df.groupby('size', as_index=False).agg(
    lambda col: col.dropna().iloc[0] if len(col.dropna()) > 0 else None
)

print(res)

输出结果

size                   col1                  col2
0   1.5  {'val': 1.1, 'id': 10}                 None
1   2.0  {'val': 1.1, 'id': 11}                 None
2   3.0  {'val': 1.1, 'id': 20}  {'val':1.1, 'id': 6}

如果你的实际场景中同一size分组的同一列存在多个非空字典值,可以根据需求调整lambda内的逻辑,比如取最后一个非空值就把iloc[0]改成iloc[-1]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:54:03