假设我有一个数据框
Sym C O R
01.01.2020 AAPL 100 115 0.2
01.01.2020 AA 200 205 0.4
02.01.2020 AAPL 101 116 0.3
02.01.2020 AA 201 206 0.2
02.01.2020 MM 298 300 0.5
03.01.2020 AAPL 110 105 0.3
03.01.2020 AA 203 204 0.1
03.01.2020 MM 301 303 0.2
04.01.2020 AAPL 108 113 0.3
04.01.2020 AA 200 201 0.4
04.01.2020 MM 302 300 0.3
我怎样才能创建一个新的数据框,使每个以前的日期都有新的列,并移动3个周期?
我希望
Sym C_1 O_1 R_1 C_2 O_2 R_2 C_3 O_3 R_3
01.01.2020 AAPL NaN NaN ... NaN
01.01.2020 AA NaN NaN ... NaN
02.01.2020 AAPL 100 115 0.2 NaN NaN NaN NaN NaN NaN
02.01.2020 AA 200 205 0.4 NaN NaN NaN NaN NaN NaN
02.01.2020 MM NaN NaN ... NaN
03.01.2020 AAPL 101 116 0.3 100 115 0.2 NaN NaN NaN
03.01.2020 AA 201 206 0.2 200 205 0.4 NaN NaN NaN
03.01.2020 MM 298 300 0.5 NaN NaN .. NaN
04.01.2020 AAPL 101 116 0.3 100 115 0.2 110 105 0.3
04.01.2020 AA 203 204 0.1 201 206 0.2 200 205 0.4
04.01.2020 MM 301 303 0.2 298 300 0.5 Nan NaN NaN
Use pandas.shift() within a group中提供的答案没有给予我所期望的。我还尝试了:
def shift_data (df):
df= df.shift(3)
return df
data.groupby('Sym', group_keys=False).apply(shift_data) #
3条答案
按热度按时间ca1c2owp1#
合并
groupby.shift
和pandas.concat
:输出:
cigdeys32#
egmofgnx3#
我想这个方法是可行的:
但要确保您的 dataframe 已排序!