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

为何pandas的DataFrameGroupBy.diff输出中parrot对应值非NaN?

解析:groupby.diff()输出中parrot对应值为-365.0的原因

先看执行的代码:

import pandas as pd
import numpy as np

speeds = pd.DataFrame(
    data = {'class': ['bird', 'bird', 'mammal', 'mammal', 'mammal'],
            'order': ['Falconiformes', 'Psittaciformes', 'Carnivora', 'Primates', 'Carnivora'],
            'max_speed': [389.0, 24.0, 80.2, np.NaN, 58.0]},
    index = ['falcon', 'parrot', 'lion', 'monkey', 'leopard']
)

grouped = speeds.groupby('class')['max_speed']
grouped.diff()

执行后输出:

falcon       NaN
parrot    -365.0
lion         NaN
monkey       NaN
leopard      NaN
Name: max_speed, dtype: float64

原因拆解:

  • 代码按class字段分组,分成了bird和mammal两个组:
    • bird组包含两行数据:falcon(max_speed=389.0)、parrot(max_speed=24.0)
    • mammal组包含三行数据:lion(max_speed=80.2)、monkey(max_speed=np.NaN)、leopard(max_speed=58.0)
  • diff()方法的作用是计算组内当前行与前一行的数值差(当前行值 - 前一行值):
    • 对于bird组:
      • falcon是组内第一行,没有前一行数据,所以结果为NaN
      • parrot是组内第二行,用自身值24.0减去前一行的389.0,得到24.0 - 389.0 = -365.0
    • 对于mammal组:
      • lion是组内第一行,无前行数据,结果为NaN
      • monkey的max_speed是NaN,和前一行的80.2做差值运算,结果仍为NaN
      • leopard的前一行是monkey的NaN,差值运算结果依然是NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:27:40