【问题标题】:How to reorder indexed rows based on a list in Pandas data frame如何根据 Pandas 数据框中的列表重新排序索引行
【发布时间】:2015-07-12 15:32:23
【问题描述】:

我有一个如下所示的数据框:

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)

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

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

我怎样才能做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用reindex like 以预定义的顺序设置索引

    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)
    

    【讨论】:

    • 请注意,这不会修改数组,您必须将其分配给某些东西。
    • 另请注意,如果您碰巧有一个多索引,则需要在 reindex 调用中使用其他参数,例如df.reindex(axis='index', level=0, labels=yourlabels_list) 或者您的标签需要匹配您的多索引。
    • 当我执行此代码时,我的所有值都更改为“nan”。为什么会发生这种情况以及如何预防?
    • @ Robvh ,当传递给 df.reindex() 的列表的值(示例中为["Z", "C", "A"])不是df 的索引时会发生这种情况,因此它使用新索引创建新行不包含任何数据。
    猜你喜欢
    • 2020-10-02
    • 2019-02-05
    • 2020-07-22
    • 2017-03-27
    • 1970-01-01
    • 2020-03-19
    • 2019-12-20
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多