带有熊猫移位的列名

时间:2020-04-28 11:11:16

标签: python pandas

尝试使用column_names为pandas列创建滞后时间

样本DF代码:

df = pd.DataFrame(np.random.randint(0,10,size=(4,2)))
df.shift(1)

OP:

     0   1
0   NaN NaN
1   9.0 2.0
2   4.0 5.0
3   6.0 0.0

但是当我尝试使用列名创建它时,我得到nan

df1=pd.DataFrame(df.shift(1),columns=["lag"+str(each) for each in df.columns])
df1

OP:

    lag0  lag1
0   NaN   NaN
1   NaN   NaN
2   NaN   NaN
3   NaN   NaN

有任何纠正建议吗?

2 个答案:

答案 0 :(得分:2)

这是另一种方法:

df = df.shift(1)

l = list(df.columns.astype('str'))
s = 'lag'
cols = [s + i for i in l]
df.columns = cols

df
    lag0    lag1
0   NaN     NaN
1   7.0     4.0
2   4.0     8.0
3   0.0     9.0

答案 1 :(得分:1)

问题是存在不同的列名,因此在创建不匹配的新DataFrame列名并创建了错误的值之后,它称为索引alignmenet。

为防止发生,可以将值转换为numpy数组:

df1=pd.DataFrame(df.shift(1).to_numpy(),columns=["lag"+str(each) for each in df.columns])
print (df1)
   lag0  lag1
0   NaN   NaN
1   2.0   2.0
2   8.0   3.0
3   6.0   8.0

但是更简单的是使用DataFrame.add_prefix

df1 = df.shift().add_prefix('lag')
print (df1)
   lag0  lag1
0   NaN   NaN
1   1.0   1.0
2   8.0   3.0
3   0.0   4.0