当在 pandas DataFrame 上进行排序时,numpy sort 表现奇怪

7
当我执行 data[genres].sum() 时,我会得到以下结果。
Action        1891
Adult            9
Adventure     1313
Animation      314
Biography      394
Comedy        3922
Crime         1867
Drama         5697
Family         754
Fantasy        916
Film-Noir       40
History        358
Horror        1215
Music          371
Musical        260
Mystery       1009
News             1
Reality-TV       1
Romance       2441
Sci-Fi         897
Sport          288
Thriller      2832
War            512
Western        235
dtype: int64

但是当我尝试使用np.sort按照总和排序时,出现了问题。
genre_count = np.sort(data[genres].sum())[::-1]
pd.DataFrame({'Genre Count': genre_count})`

我得到了以下的结果。
`Out[19]:
    Genre Count
0   5697
1   3922
2   2832
3   2441
4   1891
5   1867
6   1313
7   1215
8   1009
9   916
10  897
11  754
12  512
13  394
14  371
15  358
16  314
17  288
18  260
19  235
20  40
21  9
22  1
23  1

期望的结果应该是这样的:
Genre Count
Drama   5697
Comedy  3922
Thriller    2832
Romance     2441
Action  1891
Crime   1867
Adventure   1313
Horror  1215
Mystery     1009
Fantasy     916
Sci-Fi  897
Family  754
War     512
Biography   394
Music   371
History     358
Animation   314
Sport   288
Musical     260
Western     235
Film-Noir   40
Adult   9
News    1
Reality-TV  1

似乎numpy正在忽略流派列。
有人可以帮助我理解我哪里出错了吗?
2个回答

6

data[genres].sum() 返回一个 Series,genre 列并不是实际的列 - 它是一个索引。

np.sort 仅查看 DataFrame 或 Series 的值,而不是索引,并返回一个新的以排序后的 data[genres].sum() 值为元素的 NumPy 数组,索引信息会丢失。

如果想要对 data[genres].sum() 进行排序并保留索引信息,需要进行如下操作:

genre_count = data[genres].sum()
genre_count.sort(ascending=False) # in-place sort of genre_count, high to low

如果需要,您可以将排序后的 genre_count 系列转换回 DataFrame:

pd.DataFrame({'Genre Count': genre_count})

1

data[genres].sum() 返回一个 Series。

如果你使用的是 pandas 0.2 版本,该命令会有一些小变化。

    genre_count = data[genres].sum()
    genre_count.sort_values(ascending=False)`

您可以在pandas文档中找到参考资料。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接