gpt4 book ai didi

python - 在不循环的情况下堆叠和整形 DataFrame (pandas) 的切片

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:30 24 4
gpt4 key购买 nike

我有以下形式的 DataFrame:

     var1           var2        var3        day
0 -0.001284819 0.00138089 1.022781 1
1 -0.001310201 0.001377473 1.022626 1
2 -0.001330947 0.001374873 1.022477 2
3 -0.0013596 0.001430423 1.022385 2
4 -0.001361913 0.00144389 1.02228 3
5 -0.001371761 0.001440607 1.022161 3
6 -0.001393955 0.00143729 1.022017 4
7 -0.001431099 0.00143434 1.021908 4
8 -0.001466792 0.00143334 1.021749 5
9 -0.001491 0.00143159 1.021602 5

每个变量var1到var3都是一个时间序列,每天记录两个样本。我正在尝试将此 DataFrame 转换为如下所示:

     day   1             2             3             4             5
0 var1 -0.001284819 -0.001330947 -0.001361913 -0.001393955 -0.001466792
1 -0.001310201 -0.0013596 -0.001371761 -0.001431099 -0.001491
2 var2 0.00138089 0.001374873 0.00144389 0.00143729 0.00143334
3 0.001377473 0.001430423 0.001440607 0.00143434 0.00143159
4 var3 1.022781 1.022477 1.02228 1.022017 1.021749
5 1.022626 1.022385 1.022161 1.021908 1.021602

现在每一列都是一天,并且在每一天之内,每个变量仍然与原始时间序列中的顺序相同。

我一直在尝试找出一种使用旋转、堆叠和此类操作来避免循环来实现此结果的方法,但到目前为止我还无法管理。

任何关于如何解决这个问题的建议/提示/想法将不胜感激:)

最佳答案

一种方法是使用 groupby 的 cumcount 创建一个列来跟踪它是第一个还是第二个:

In [11]: df['occurrence'] = df.groupby('day').cumcount()

In [12]: df = df.set_index(['day', 'occurrence'])

现在你可以做一些堆叠和取消堆叠:

In [13]: df.stack(0).unstack(0)
Out[13]:
day 1 2 3 4 5
occurrence
0 var1 -0.001285 -0.001331 -0.001362 -0.001394 -0.001467
var2 0.001381 0.001375 0.001444 0.001437 0.001433
var3 1.022781 1.022477 1.022280 1.022017 1.021749
1 var1 -0.001310 -0.001360 -0.001372 -0.001431 -0.001491
var2 0.001377 0.001430 0.001441 0.001434 0.001432
var3 1.022626 1.022385 1.022161 1.021908 1.021602

关于python - 在不循环的情况下堆叠和整形 DataFrame (pandas) 的切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22719649/

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