我觉得我无法像通常那样正确地搜索这个元素,因为我不知道这个元素( n )变成了n。
我相信这是个小问题,但我不确定。
我输入了以下代码:
def get_quantile_count(group, q=0.5):
group=group.sort_index(by='prop', ascending=False)
return group.prop.cumsum().searchsorted(q) + 1
diversity= top1000.groupby(['year','sex']).apply(get_quantile_count)
diversity=diversity.unstack('sex')top1000.head()返回:
name sex births year prop
year sex
1880 F 0 Mary F 7065 1880 0.077643
1 Anna F 2604 1880 0.028618
2 Emma F 2003 1880 0.022013
3 Elizabeth F 1939 1880 0.021309
4 Minnie F 1746 1880 0.019188和diversity.head()返回
sex F M
year
1880 [38] [14]
1881 [38] [14]
1882 [38] [15]
1883 [39] [15]
1884 [39] [16]我相信,因为当我运行diversity.plot(title='stuff')时,这些值在括号中,所以我得到了错误:
TypeError: Empty 'DataFrame': no numeric data to plot这些方括号从哪里爬进来?
发布于 2015-08-10 23:30:36
这与searchsorted有关,您的函数get_quantile_count在returning时调用它。
它总是返回一份清单。请参阅文档中的这个示例:
X= pd.Series(1,2,3) >>> x 0 1 1 2 2 3 dtype: int64 >>> x.searchsorted(4)数组(3)
为了解决这个问题,您可以将函数的最后一行更改为:
return group.prop.cumsum().searchsorted(q)[0] + 1或者,如果您出于某种原因不想编辑函数,可以使用applymap提取每个列表的第一个元素,该元素将任意函数应用于DataFrame的每个元素。
In []: df
Out[]:
F M
year
1880 [38] [14]
1881 [38] [14]
1882 [38] [15]
1883 [39] [15]
1884 [39] [16]
In []: df.applymap(lambda x: x[0])
Out[]:
F M
year
1880 38 14
1881 38 14
1882 38 15
1883 39 15
1884 39 16https://stackoverflow.com/questions/31930607
复制相似问题