首页 > 解决方案 > Pandas:跨列动态移动值

问题描述

我有以下df:

           sales2001   sales2002   sales2003  sales2004
   200012  19.12       0.98 
   200101  19.1        0.98        2.3
   200102  21          0.97        0.8
    ...
   200112  19.12       0.99        2.4
   200201              0.98        2.5
   200202              0.97        0.8        1.2

我想移动内容以使其与时间间隔视图对齐,如下所示:

           sales+1y   sales+2y
   200012  19.12       0.98 
   200101  0.98        2.3       
   200102  0.97        0.8
    ...
   200112  0.99        2.4
   200201  0.98        2.5
   200202  0.8         1.2

基本上将预测数据点与索引的固定时间间隔对齐。我尝试使用 iterrows 并动态调用给定索引的列,但无法使其工作。你们有什么建议吗?

标签: pythonpandasshift

解决方案


使用justify和删除所有至少包含一个的DataFrame.dropna列:axis=1NaN

df1 = (pd.DataFrame(justify(df.values, invalid_val=np.nan, side='right'), index=df.index)
          .dropna(axis=1))

如果需要按位置选择最后一列:

df1 = pd.DataFrame(justify(df.values, invalid_val=np.nan, side='right')[:, -2:],index=df.index)

或者:

df1 = (pd.DataFrame(justify(df.values, invalid_val=np.nan, side='right'), index=df.index)
        .iloc[:, -2:])

df1.columns = [f'sales+{i+1}y' for i in range(len(df1.columns))]
print (df1)
        sales+1y  sales+2y
200012     19.12      0.98
200101      0.98      2.30
200102      0.97      0.80
200112      0.99      2.40
200201      0.98      2.50
200202      0.80      1.20

推荐阅读