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

Pandas groupby计数异常及unique结果异常问题求助

关于Pandas Groupby的两个问题解答

问题1:Groupby计数结果不正确的常见原因

我经常碰到开发者遇到这类问题,核心原因大多和数据细节或方法误用有关,常见的几个情况:

  • 浮点数精度隐形差异:像你用到的Latitude、Longitude这类浮点型字段,看起来数值相同,但实际存储的精度可能有细微差别(比如一个是39.338764,另一个是39.3387640000001),Pandas会把它们判定为不同分组,导致计数分散。
  • 缺失值的隐性排除:默认情况下,groupby会自动过滤包含NaN的行,如果你的数据里分组列存在缺失值,而你预期要统计这些行,结果就会比实际数量少。
  • count()和size()混淆:这两个方法很容易用错——count()只统计分组内非缺失值的数量,而size()统计分组内的总行数(包括缺失值),用错方法自然会得到错误计数。
  • 分组键未做清洗:如果分组键是字符串类型,可能存在大小写不一致、首尾空格(比如"2010"和"2010 ")或者格式差异,这些都会被当成不同分组,导致计数错误。

问题2:异常分组结果的原因

先看你给出的结果:

Latitude  Longitude   Year  Day
39.338764 -85.241940  2009  141    [69.9123985]
                      2010  145    [60.184353, 59.7501973333, 52.523612]
                      2011  157    [62.324484, 44.512905]
                      2012  139    [57.240542625]
                      2013  141    [73.2846975, 67.992009]
                      2012  139    [55.4780421429]

为什么2010年第145天有3个Yield值?

这是正常现象:unique()方法会返回该分组下所有不重复的Yield值,说明这个(Latitude, Longitude, Year, Day)组合的分组里,确实有3条不同的Yield记录,去重后就显示这3个值。

为什么2012年第139天出现两个独立分组?

这是典型的浮点数精度问题:虽然你看到的Latitude和Longitude都是39.338764和-85.241940,但这两个分组的实际浮点数值存在细微差异(比如一个保留6位小数,另一个保留10位,只是显示时被截断了)。Pandas的groupby是严格按照实际存储的数值来分组的,所以会把它们分成两个独立的组。

你可以通过把浮点型经纬度字段四舍五入到固定小数位,或者转换成指定精度的字符串来解决这个问题,比如:

# 四舍五入到6位小数后再分组
dataframe['Latitude'] = dataframe['Latitude'].round(6)
dataframe['Longitude'] = dataframe['Longitude'].round(6)
# 再执行分组操作
print(dataframe.groupby(['Latitude','Longitude','Year','Day'])['Yield'].unique())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:23:43