Python 带移位的列名
尝试为具有Python 带移位的列名,python,pandas,Python,Pandas,尝试为具有列\u名称的列创建滞后 示例DF代码: df = pd.DataFrame(np.random.randint(0,10,size=(4,2))) df.shift(1) 作品: 但是,当我尝试使用列名创建它时,我得到了nan df1=pd.DataFrame(df.shift(1),columns=["lag"+str(each) for each in df.columns]) df1 作品: 有什么建议可以纠正这个问题吗?问题是有不同的列名称,因此在创建了不匹配的新DataF
列\u名称的列创建滞后
示例DF代码:
df = pd.DataFrame(np.random.randint(0,10,size=(4,2)))
df.shift(1)
作品:
但是,当我尝试使用列名创建它时,我得到了nan
df1=pd.DataFrame(df.shift(1),columns=["lag"+str(each) for each in df.columns])
df1
作品:
有什么建议可以纠正这个问题吗?问题是有不同的列名称,因此在创建了不匹配的新DataFrame列名称并创建了错误的ISNG值之后,它被称为index 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列名并创建了错误的ISNG值之后,它被称为index 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
但更简单的是使用:
以下是另一种方法:
df = df.shift(1)
l = list(df.columns.astype('str'))
s = 'lag'
cols = [s + i for i in l]
df.columns = cols
以下是另一种方法:
df = df.shift(1)
l = list(df.columns.astype('str'))
s = 'lag'
cols = [s + i for i in l]
df.columns = cols
只需使用添加前缀
。要使其工作,您需要df.shift(1).values
。否则,您将使用看不见的索引重新编制索引,这将生成所有索引,只需使用add\u prefix
。要使其工作,您需要df.shift(1).values
。否则,您将使用看不见的索引重新编制索引,这将生成所有NAN
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