堆叠带有随附标签列的列

我试图堆叠一组列,以适合内核密度估计器,以便了解观察间隔的概率相对于时间和价格的变化如何变化。

我当前的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()实现此目的,但是我不确定如何创建一个相应的列来标记时间的变化。

非常感谢您的帮助。

zfau1000 回答:堆叠带有随附标签列的列

设置源数据。

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的基本想法。但是就正确命名轴而言,需要一些准备工作,以便在我们堆叠和reset_index时,需要使用列名。最后一步是简单地将列名称标签“ 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
本文链接:https://www.f2er.com/3034636.html

大家都在问