使用pd.pivot_table后出现意外重复值的问题排查
问题:透视表出现重复索引与错误数据的原因分析
数据集信息
>>> df_anon.head() a b c d 0 1 30 1 929.3453 1 1 30 3 875.3986 2 1 30 5 849.9972 3 1 51 1 571.8364 4 1 51 2 508.9944 >>> df_anon[["a", "b", "c"]].nunique() a 16665 b 61 c 6 dtype: int64 >>> df_anon.dtypes a int64 b int64 c int64 d float64 dtype: object >>> df_anon.groupby(["a", "b", "c"]).size().sort_values() a b c 1 30 1 1 11114 35 1 1 27 5 1 3 1 1 1 .. 5571 51 4 1 3 1 2 1 5573 13 1 1 16665 33 6 1 Length: 112491, dtype: int64
从以上数据可确认,三元组(a, b, c)是唯一的(并非所有可能的组合都存在于数据中)。
透视表异常现象
执行以下代码生成透视表后,出现不符合预期的情况:
>>> df_anon_pivoted = df_anon.pivot_table( index=["a", "b"], columns=["c"], values=["d"], ) >>> df_anon_pivoted.index.value_counts() a b 1395 21 6 1855 20 6 1856 1 6 35 6 1857 8 6 .. 937 57 6 938 34 6 2794 55 6 2795 54 2 1 30 1 Name: count, Length: 4169, dtype: int64
按逻辑,将c的不同值映射为透视表的列后,(a, b)作为索引应该是唯一的,但实际结果显示存在大量重复的(a, b)索引。
除此之外,透视表中还出现了原数据中不存在的错误条目:比如透视表中a=1, b=51, c=1对应的173.5975,实际在原始数据中属于a=2, b=30, c=1的组合:
>>> df_anon_pivoted.head() d c 1 2 3 4 5 6 a b 1 30 929.3453 NaN 875.3986 NaN 849.9972 NaN 51 571.8364 508.9944 514.7396 593.0696 568.6159 598.0888 51 173.5975 NaN 202.6101 NaN 190.2514 NaN 51 741.7860 681.8020 697.6942 663.4423 748.3383 756.5396 51 1131.7893 NaN 999.3353 NaN 1143.9245 NaN
>>> df_anon.query("d > 173.5974 and d < 173.5976") a b c d 2 30 1 173.5975
疑问
我忽略了什么?
内容的提问来源于stack exchange,提问作者nestor556
相关产品推荐
相关产品推荐

