在pandas DataFrame上排序时,numpy sort很奇怪

fun*_*ion 7 python sorting numpy dataframe pandas

当我这样做时,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
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用时对总和进行排序 np.sort

genre_count = np.sort(data[genres].sum())[::-1]
pd.DataFrame({'Genre Count': genre_count})`
Run Code Online (Sandbox Code Playgroud)

我得到以下结果

`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
Run Code Online (Sandbox Code Playgroud)

预期结果应该是这样的:

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
Run Code Online (Sandbox Code Playgroud)

似乎numpy忽略了类型列.

有人能帮助我理解我哪里出错吗?

Ale*_*ley 6

data[genres].sum()返回一个系列.类型列实际上不是列 - 它是索引.

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
Run Code Online (Sandbox Code Playgroud)

然后,genre_count如果您愿意,可以将已排序的系列重新转换为DataFrame:

pd.DataFrame({'Genre Count': genre_count})
Run Code Online (Sandbox Code Playgroud)