[英]How do I shift the contents in the first column into column names in Pandas
[英]Column names with pandas shift
尝试使用column_names
为 pandas 列创建滞后
示例 DF 代码:
df = pd.DataFrame(np.random.randint(0,10,size=(4,2)))
df.shift(1)
操作:
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
操作:
lag0 lag1
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN 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
问题是有不同的列名,所以在创建新的 DataFrame 列名不匹配并且创建了错误值之后,它被称为索引对齐。
为防止可能将值转换为 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.