gpt4 book ai didi

python - 使用堆栈/取消堆栈时如何维护 Pandas DataFrame 索引顺序?

转载 作者:太空狗 更新时间:2023-10-30 01:13:58 25 4
gpt4 key购买 nike

示例一:注意给定 Pandas DataFrame df 的索引顺序:

>>> df
A B
first second
zzz z 2 4
a 1 5
aaa z 6 3
a 7 8

在给定的 df DataFrame 对象上使用 stackunstack 方法后,索引会自动按字典顺序(字母顺序)排序,以便一个丢失了行的原始顺序。

>>> df.unstack().stack()
A B
first second
aaa a 7 8
z 6 3
zzz a 1 5
z 2 4

在上面的unstack/stack操作后是否可以保持原来的顺序?

根据官方文档reshaping-by-stacking-and-unstacking :

Notice that the stack and unstack methods implicitly sort the index levels involved. Hence a call to stack and then unstack, or viceversa, will result in a sorted copy of the original DataFrame or Series

示例二:

>>> dfu = df.unstack()
>>> dfu
A Z
second a z a z
first
aaa 7 6 8 3
zzz 1 2 5 4

如果保留原始索引,我们需要像这样的dfu:

>>> dfu
A Z
second a z a z
first
zzz 1 2 5 4
aaa 7 6 8 3

我正在寻找的是一种解决方案,可用于在 unstack()stack() 方法之后基于原始数据帧恢复索引顺序已被调用。

最佳答案

您可以保留原始 indexreindex 的副本对此,感谢 Andy Hayden。

演示:

#              A  B
#first second
#zzz z 2 4
# a 1 5
#aaa z 6 3
# a 7 8

print df.index
#MultiIndex(levels=[[u'aaa', u'zzz'], [u'a', u'z']],
# labels=[[1, 1, 0, 0], [1, 0, 1, 0]],
# names=[u'first', u'second'])

#set index to variable
index = df.index

#stack and unstack
df = df.unstack().stack()
print df
# A B
#first second
#aaa a 7 8
# z 6 3
#zzz a 1 5
# z 2 4
# A B

df = df.reindex(index)
print df
# A B
#first second
#zzz z 2 4
# a 1 5
#aaa z 6 3
# a 7 8

关于python - 使用堆栈/取消堆栈时如何维护 Pandas DataFrame 索引顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com