IndexError: index 0 is out of bounds for axis 0 with size 0 for trying to find mode (most frequent value)

IndexError: index 0 is out of bounds for axis 0 with size 0 for trying to find mode (most frequent value)

我连接了 500 个 XSLX 文件,其形状为 (672006, 12)。所有的进程都有一个唯一的编号,我想对这些数据进行groupby()获取相关信息。对于温度,我想 select 第一个和数字最频繁的值。

测试数据:

df_test = 
pd.DataFrame({"number": [1,1,1,1,2,2,2,2,3,3,3,3], 
'temperature': [2,3,4,5,4,3,4,5,5, 3, 4, 4], 
'height': [100, 100, 0, 100, 100, 90, 90, 100, 100, 90, 80, 80]})

df_test.groupby('number')['temperature'].first()

df_test.groupby('number')['height'].agg(lambda x: x.value_counts().index[0])

我在尝试获取每个数字的最频繁高度时收到以下错误: IndexError:索引 0 超出轴 0 的范围,大小为 0

很奇怪,mean() / first() / max() 等都在工作。 在我单独连接的数据集的第二部分,聚合起作用了。

有人可以建议如何处理这个错误吗? 谢谢!

我认为您的问题是您的一个或多个 groupby 返回所有 NaN 高度:

查看此示例,其中我添加了一个数字 4,其高度为 np.NaN。

df_test = pd.DataFrame({"number": [1,1,1,1,2,2,2,2,3,3,3,3,4,4], 
'temperature': [2,3,4,5,4,3,4,5,5, 3, 4, 4, 5, 5], 
'height': [100, 100, 0, 100, 100, 90, 90, 100, 100, 90, 80, 80, np.nan, np.nan]})

df_test.groupby('number')['temperature'].first()

df_test.groupby('number')['height'].agg(lambda x: x.value_counts().index[0])

输出:

IndexError: index 0 is out of bounds for axis 0 with size 0

让我们用零填充这些 NaN,然后​​重新运行。

df_test = pd.DataFrame({"number": [1,1,1,1,2,2,2,2,3,3,3,3,4,4], 
'temperature': [2,3,4,5,4,3,4,5,5, 3, 4, 4, 5, 5], 
'height': [100, 100, 0, 100, 100, 90, 90, 100, 100, 90, 80, 80, np.nan, np.nan]})

df_test = df_test.fillna(0) #Add this line
df_test.groupby('number')['temperature'].first()

df_test.groupby('number')['height'].agg(lambda x: x.value_counts().index[0])

输出:

number
1    100.0
2     90.0
3     80.0
4      0.0
Name: height, dtype: float64