【问题标题】:Shift column in pandas dataframe up by one?将熊猫数据框中的列向上移动一格?
【发布时间】:2013-12-04 10:19:00
【问题描述】:

我有一个熊猫数据框。我想“滞后”我的一个专栏。例如,将整列“gdp”向上移动 1,然后删除剩余行底部的所有多余数据,使所有列的长度再次相等。

df =
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7

df_lag =
    y  gdp  cap
0   1    3    5
1   2    7    9
2   8    4    2
3   3    7    7

无论如何要这样做?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:
    In [44]: df['gdp'] = df['gdp'].shift(-1)
    
    In [45]: df
    Out[45]: 
       y  gdp  cap
    0  1    3    5
    1  2    7    9
    2  8    4    2
    3  3    7    7
    4  6  NaN    7
    
    In [46]: df[:-1]                                                                                                                                                                                                                                                                                                               
    Out[46]: 
       y  gdp  cap
    0  1    3    5
    1  2    7    9
    2  8    4    2
    3  3    7    7
    

    【讨论】:

    • 只需使用df.dropna(),它将删除所有 NaN 行,而无需指定要删除的行数。
    【解决方案2】:

    将列 gdp 上移:

    df.gdp = df.gdp.shift(-1)
    

    然后删除最后一行

    【讨论】:

      【解决方案3】:
      df.gdp = df.gdp.shift(-1) ## shift up
      df.gdp.drop(df.gdp.shape[0] - 1,inplace = True) ## removing the last row
      

      【讨论】:

        【解决方案4】:

        例如,轻松地移动 5 个值并摆脱 NaN 行,而无需跟踪您移动的值的数量:

        d['gdp'] = df['gdp'].shift(-5)
        df = df.dropna()
        

        【讨论】:

          【解决方案5】:

          先移列:

          df['gdp'] = df['gdp'].shift(-1)
          

          第二次删除包含 NaN Cell 的最后一行:

          df = df[:-1]
          

          第三次重置索引:

          df = df.reset_index(drop=True)
          

          【讨论】:

            【解决方案6】:

            时间在流逝。目前的 Pandas 文档推荐这种方式:

             df.loc[:, 'gdp'] = df.gdp.shift(-1)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-08-02
              • 2016-05-21
              • 2019-03-08
              • 1970-01-01
              • 1970-01-01
              • 2021-06-11
              相关资源
              最近更新 更多