为何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
相关产品推荐
相关产品推荐

