gpt4 book ai didi

python - 带有标签列的堆叠列

转载 作者:行者123 更新时间:2023-12-01 06:50:25 25 4
gpt4 key购买 nike

我尝试堆叠一组列以适应核密度估计器,以便了解观察间隔的概率如何随着时间和价格的变化而变化。

我当前的 DataFrame 如下(不是确切的值,只是一个示例):

date        price   1d_change  2d_price_change
2017-01-03 10.2 1.0 7.8
2017-01-04 11.2 7.8 9.4
2017-01-05 17.0 3.6 1.5
2017-01-06 20.6 -2.1 ...
2017-01-07 18.5 ... ...

我想将每个价格变化列堆叠到一个列中,并创建与时间变化相对应的另一列,例如:

price_change    time_interval
10.2 1
11.2 1
17.0 1
20.6 1
18.5 1
7.8 2
9.4 2
1.5 2

我知道我可以简单地使用 pd.hstack() 来实现此目的,但我不确定如何创建一个相应的列来及时标记更改。

非常感谢您的帮助。

最佳答案

设置源数据。

df = pd.DataFrame({
'date': ['2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06'],
'price': [10.2, 11.2, 17, 20.6],
'1d': [1, 7.8, 3.6, -2.1],
'2d': [7.8, 9.4, 1.5, 3.3]})

df = df[['date', 'price', '1d', '2d']]

print(df)
         date  price   1d   2d
0 2017-01-03 10.2 1.0 7.8
1 2017-01-04 11.2 7.8 9.4
2 2017-01-05 17.0 3.6 1.5
3 2017-01-06 20.6 -2.1 3.3

现在来看看解决方案。基本思想正如您提到的使用stack。但是在正确命名轴方面需要一些准备工作,以便当我们堆叠和重置索引时,列名称就是我们想要的。最后一步是简单地将列名称标签“1d”、“2d”等替换为适当的整数。

x = df.set_index('date').stack()
x.index.set_names(['date', 'time_interval'], inplace=True)
x.name = 'price_change'
print(x)
date        time_interval
2017-01-03 price 10.2
1d 1.0
2d 7.8
2017-01-04 price 11.2
1d 7.8
2d 9.4
2017-01-05 price 17.0
1d 3.6
2d 1.5
2017-01-06 price 20.6
1d -2.1
2d 3.3
stacked = x.reset_index().replace({'price': 1, '1d': 2, '2d': 3})
print(stacked)
          date  time_interval  price_change
0 2017-01-03 1 10.2
1 2017-01-03 2 1.0
2 2017-01-03 3 7.8
3 2017-01-04 1 11.2
4 2017-01-04 2 7.8
5 2017-01-04 3 9.4
6 2017-01-05 1 17.0
7 2017-01-05 2 3.6
8 2017-01-05 3 1.5
9 2017-01-06 1 20.6
10 2017-01-06 2 -2.1
11 2017-01-06 3 3.3

关于python - 带有标签列的堆叠列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59036854/

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