【问题标题】:Pandas: Pivot table without sorting index and columnsPandas:没有排序索引和列的数据透视表
【发布时间】:2015-03-03 04:56:05
【问题描述】:

我正在尝试以某种方式对数据进行透视,以使结果表的索引和列不会自动排序。数据示例可能是:

X   Y   Z

1   1   1
3   1   2
2   1   3
4   1   4

1   2   5
3   2   6
2   2   7
4   2   8

数据被解释为 X、Y 和 Z 轴。旋转后的结果应如下所示:

X   1   3   2   4
Y
1   1   2   3   4
2   5   6   7   8

结果看起来像这样,其中索引和列被排序,数据也相应地排序:

X   1   2   3   4
Y
1   1   3   2   4
2   5   7   6   8

此时,我丢失了有关测量顺序的信息。例如,假设我将在 Y=1 处绘制行,X 作为 X 轴,数据值在 Y 轴上。

This would result in the figures in this picture. 右边是我希望如何绘制数据。有谁知道如何防止 pandas 在透视表时对索引和列进行排序?

【问题讨论】:

    标签: python sorting pandas


    【解决方案1】:

    我有一个替代恢复顺序的方法,因为顺序是基于 X 相对于 Y 值的,例如,您可以通过以下方式恢复您的 X 列排序:

    import pandas as pd
    
    # using your sample data
    df = pd.read_clipboard()
    
    df = df.pivot('Y', 'X', 'Z')
    
    df
    X  1  2  3  4
    Y            
    1  1  3  2  4
    2  5  7  6  8
    
    # re-order your X columns by the values of first Y, for instance
    df = df[df.T[1].values]
    
    df
    X  1  3  2  4
    Y            
    1  1  2  3  4
    2  5  6  7  8
    

    不是最好的方法,但肯定会达到你想要的。

    【讨论】:

    • 我了解您所做的,但我希望列按原始顺序排列,而不管 Z 值如何。我给出的例子可能不是最好的。也许我可以从 X 列中检索模式 [1, 3, 2, 4] 并按该模式排序,我正在尝试找出方法,但如果你有一个想法,我非常感激。
    • 好的,我可以通过df.groupby('Y')['X'].get_group(1).values 检索模式,然后按这些排序。
    猜你喜欢
    • 2016-09-15
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2017-12-31
    • 2012-05-22
    • 2019-05-21
    • 2016-09-05
    相关资源
    最近更新 更多