【问题标题】:Pandas dataframe order [duplicate]熊猫数据框顺序[重复]
【发布时间】:2017-04-08 05:13:46
【问题描述】:

我有一个数据框:

df = pd.DataFrame({'A':[1,1,1,2,2,2,3,3,3],
                   'B':[3,2,1,1,3,2,3,2,1]})

我想重新排列 B 列,使其显示为:

【问题讨论】:

    标签: python pandas jupyter-notebook


    【解决方案1】:

    使用sort_values 并指定列:

    df = df.sort_values(['A','B'])
    
    df = pd.DataFrame({'A':[1,1,1,2,2,2,3,3,3],
                       'B':[3,2,1,1,3,2,3,2,1]})
    
    df = df.sort_values(['A','B'])
    #alternatively
    #df.sort_values(['A','B'], inplace=True)
    print (df)
       A  B
    2  1  1
    1  1  2
    0  1  3
    3  2  1
    5  2  2
    4  2  3
    8  3  1
    7  3  2
    6  3  3
    

    df = df.sort_values(['A','B']).reset_index(drop=True)
    print (df)
       A  B
    0  1  1
    1  1  2
    2  1  3
    3  2  1
    4  2  2
    5  2  3
    6  3  1
    7  3  2
    8  3  3
    

    【讨论】:

    • 知道了。谢谢。那行得通。
    • @jezrael,你有 0.17.0 之前的 pandas 版本的后备方案吗?
    • 我的pandas,版本0.15.2,没有sort_values() 方法。 documentation 声称它是“0.17.0 版中的新功能”,这显然是不正确的。
    • 以前称为 .sort()
    【解决方案2】:

    这会单独留下'A',并在组内进行排序。
    请注意,索引保持原样。

    df.assign(B=df.groupby('A').transform(lambda x: x.sort_values()))
    
       A  B
    0  1  1
    1  1  2
    2  1  3
    3  2  1
    4  2  2
    5  2  3
    6  3  1
    7  3  2
    8  3  3
    

    请参阅This Question 和相关答案。归功于 @root 如果这个答案对人们有帮助,请点击链接并在那里投票支持 root 的答案。谢谢。

    【讨论】:

    • 谢谢。这也有效。
    • @magicsword 请帮我一个忙,点击链接并在那里投票支持root的答案。谢谢。
    • @magics 这个(就像我的回答一样)处理索引的方式与您接受的答案不同。哪一个符合您的要求?
    • 我接受了 jazrael 的回答,因为我不关心索引。我使用 A 列作为参考。
    【解决方案3】:

    我有熊猫版本0.15.2,它没有DataFrame.sort_values() 方法。所以这是一个对两列进行排序和替换的后备:

    df.loc[:,["A", "B"]] = sorted(zip(df.A, df.B))
    

    【讨论】:

    • 嗯,df = df.sort(columns=['A','B']) 是如何工作的?
    • 0.17.0 中重命名为check
    • 保留行标签,即打乱索引:它变成[2, 1, 0, 3, 5, ...]
    • 可能是一些bug,是不可能升级的吗?最后一个版本是 0.19.2,很快就会是 0.20.0
    • 是时候更新你的 pandas alexis...:)
    猜你喜欢
    • 2016-05-16
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多