如何基于Pandas数据框中的列表对索引行进行重新排序


73

我有一个看起来像这样的数据框:

company  Amazon  Apple  Yahoo
name
A             0    130      0
C           173      0      0
Z             0      0    150

它是使用以下代码创建的:

import pandas as pd
df = pd.DataFrame({'name' : ['A', 'Z','C'],
                   'company' : ['Apple', 'Yahoo','Amazon'],
                   'height' : [130, 150,173]})

df = df.pivot(index="name", columns="company", values="height").fillna(0)

我要做的是name根据预定义的列表对行(带有索引)进行排序["Z", "C", "A"]。结果是:

company  Amazon  Apple  Yahoo
name
Z             0      0    150
C           173      0      0
A             0    130      0

我该如何实现?

Answers:


105

你可以使用预定义的顺序设置指标reindex

In [14]: df.reindex(["Z", "C", "A"])
Out[14]:
company  Amazon  Apple  Yahoo
Z             0      0    150
C           173      0      0
A             0    130      0

但是,如果按字母顺序排列,则可以使用 sort_index(ascending=False)

In [12]: df.sort_index(ascending=False)
Out[12]:
company  Amazon  Apple  Yahoo
name
Z             0      0    150
C           173      0      0
A             0    130      0

如下所示,您需要将其分配给一些变量

In [13]: df = df.sort_index(ascending=False)

14
请注意,这不会修改数组,您必须将其分配给某些对象。
endolith'7

8
还要注意,如果碰巧有一个多索引,则需要在重新索引调用中使用其他参数,例如,df.reindex(axis='index', level=0, labels=yourlabels_list)否则您的标签将需要与多索引匹配。
hlongmore

1
当我执行此代码时,我所有的值都将更改为“ nan”。为什么会发生这种情况以及如何预防呢?
罗夫

1
@ Robvh,当传递给df.reindex()的列表的值["Z", "C", "A"]不是索引时,就会发生这种情况,df因此它将使用不包含数据的新索引来创建新行。
johnDanger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.