Pandas:不排序索引和列的数据透视表

4

我正在尝试以一种方式旋转数据,使得结果表的索引和列不会自动排序。 数据的示例可能如下:

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轴。

这将导致图片中的数字。右边是我希望数据呈现的方式。有没有人知道如何防止Pandas在透视表时对索引和列进行排序?

1个回答

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

这不是最好的方法,但肯定能实现你想要的。


1
我理解你的做法,但是我想要列按照原始顺序排列,不考虑Z值。我给出的例子可能不是最好的。也许我可以从X列中检索模式 [1, 3, 2, 4] 并按照该模式排序,我正在尝试找到如何实现,如果你有任何想法,我非常感激。 - Rubenknex
2
好的,我可以通过 df.groupby('Y')['X'].get_group(1)。values 检索出模式,并按照它们排序。 - Rubenknex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接