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

我有一个熊猫数据框。我想“滞后”我的一个专栏。例如,将整列“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】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

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

          【讨论】:

            【解决方案6】:

            先移列:

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

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

            df = df[:-1]
            

            第三次重置索引:

            df = df.reset_index(drop=True)
            

            【讨论】:

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