pandas DataFrame按行调用mode(axis=1)求众数返回两列异常问题
问题原因
pandas的mode(axis=1)方法会返回每行所有的众数,最终输出的列数等于全量数据中单行包含的最多个众数数量。只要数据集中任意一行存在多个出现频次并列最高的值,输出结果就会生成对应数量的列,其余行没有对应数量众数的位置会自动填充NaN。
你用3行测试样例、data.head()测试时返回单列,是因为这部分数据的每一行都只有1个众数;全量5665行数据中至少存在1行包含2个并列众数(你的数据集共6列,很容易出现某行两个值各出现3次、频次并列最高的情况),因此全量运行时返回2列。你看到前几行第二列全为NaN,是因为包含多个众数的行不在数据集前5行范围内。
解决方案
- 如果你只需要每行取一个众数,直接提取结果的第一列即可:
# 计算每行众数,取第一个结果,返回结构为Series row_mode = data.mode(axis=1)[0]
- 如果需要确认哪些行存在多个众数,可以用以下代码定位:
mode_result = data.mode(axis=1) # 筛选出第二列非空的行,即存在多个众数的行 multi_mode_rows = mode_result[~mode_result[1].isna()].index print(f"共{len(multi_mode_rows)}行存在多个并列众数,行索引:{multi_mode_rows.tolist()}")
内容的提问来源于stack exchange,提问作者shuvo
相关产品推荐
相关产品推荐

