我有一个Pandas DataFrame,其中包含3列:
很明显,
因此,例如值
target
、pred
和conf_bin
。如果我运行groupby(by='conf_bin').apply(...)
,则我的应用函数将对在conf_bin
列中不存在的值调用空的DataFrame
。这是怎么可能的?
细节
DataFrame看起来像这样:
target pred conf_bin
0 5 6 0.50
1 4 4 0.60
2 4 4 0.50
3 4 3 0.50
4 4 5 0.50
5 5 5 0.55
6 5 5 0.55
7 5 5 0.55
很明显,
conf_bin
是一个数值二进制,在np.arange(0, 1, 0.05)
的范围内取值。然而,并非所有值都出现在数据中:In [224]: grp = tp.groupby(by='conf_bin')
In [225]: grp.groups.keys()
Out[225]: dict_keys([0.5, 0.60000000000000009, 0.35000000000000003, 0.75, 0.85000000000000009, 0.65000000000000002, 0.55000000000000004, 0.80000000000000004, 0.20000000000000001, 0.45000000000000001, 0.40000000000000002, 0.30000000000000004, 0.70000000000000007, 0.25])
因此,例如值
0
和0.05
不会出现。但是,当我在组上运行apply
时,我的函数确实会为这些值调用:In [226]: grp.apply(lambda x: x.shape)
Out[226]:
conf_bin
0.00 (0, 3)
0.05 (0, 3)
0.10 (0, 3)
0.15 (0, 3)
0.20 (22, 3)
0.25 (75, 3)
0.30 (95, 3)
0.35 (870, 3)
0.40 (8505, 3)
0.45 (40068, 3)
0.50 (51238, 3)
0.55 (54305, 3)
0.60 (47191, 3)
0.65 (38977, 3)
0.70 (34444, 3)
0.75 (20435, 3)
0.80 (3352, 3)
0.85 (4, 3)
0.90 (0, 3)
dtype: object
问题:
- Pandas怎么知道0.0和0.5这些值“有意义”,因为它们并没有出现在我的
DataFrame
中? - 为什么它会使用空的
DataFrame
对象调用我的apply函数,对于那些在grp.groups
中不存在的值?
dtypes
是指数据类型。是否可能它们是分类数据类型,并包含有关类别规范中所有桶的信息? - piRSquaredconf_bin
的数据类型是category
。谢谢!! - Oliver Dain.groupby(..., observed=True)
。 - ayorgo