我有一个包含3列的Pandas DataFrame,target
,pred
和conf_bin
。如果我运行groupby(by='conf_bin').apply(...)
我的应用函数会被调用空DataFrame
s,以查找conf_bin
列中未显示的值。这怎么可能?
详情
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
问题:
DataFrame
中?DataFrame
中没有出现的值为空grp.groups
个对象调用我的apply函数?答案 0 :(得分:0)
我也遇到了这个问题,在尝试为我的数据框中的每个类别创建子图时会弹出这个问题。
我提出了以下解决方法(基于this SO post),将非空组拉出到列表中。
groups = df.groupby('conf_bin')
group_list = [(index, group) for index, group in groups if len(g) > 0]
它确实打破了“你在熊猫中争吵你的数据”的隐含契约,并且可能会错误管理内存,但它确实有效。
现在,您可以使用与groupby对象相同的接口遍历您的groupby列表,例如。
fig, axes = plt.subplots(nrows=len(group_list), ncols=1)
for (index, group), ax in zip(group_list, axes.flatten()):
group['target'].plot(ax=ax, title=index)