使用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
这里的 (a, b) 索引难道不应该是唯一的吗,因为 c 的值被映射到不同的列?我还发现透视后的表格中有些条目在原始数据中并不存在,例如这里的第三行
>>> 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
173.5975 的值只出现在不同的 (a, b, c) 组合中:
>>> df_anon.query("d > 173.5974 and d < 173.5976")
a b c d
2 30 1 173.5975
我到底错在哪里?
解决方案
这个问题出现在版本 2.3.3,我通过升级解决了它(3.0.3 起了作用,但也可能更早的版本也行)。
问题似乎在于为正确的输出数据设置了错误的索引,而且只有当输入规模足够大时才会出现。此 的bug听起来与之相关。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。