代码之家  ›  专栏  ›  技术社区  ›  Bill Armstrong

PANDAS:将行(索引和值)从最后一个移动到第一个[重复]

  •  2
  • Bill Armstrong  · 技术社区  · 8 年前

    ordered row index (具体来说-我的 row moves the values while maintaining the original index .我的df将描述作为索引,值与索引描述是离散的。

    df = pd.DataFrame({
        'col1' : ['A', 'A', 'B', 'F', 'D', 'C'],
        'col2' : [2, 1, 9, 8, 7, 4],
        'col3': [0, 1, 9, 4, 2, 3],
    }).set_index('col1')
    
    #output
    In [7]: df
    Out[7]: 
          col2  col3
    col1            
    A        2     0
    A        1     1
    B        9     9
    F        8     4
    D        7     2
    C        4     3
    

    df.loc["Deferred Description"] = pd.Series([''])
    
    In [9]: df
    Out[9]: 
                          col2  col3
    col1                            
    A                      2.0   0.0
    A                      1.0   1.0
    B                      9.0   9.0
    F                      8.0   4.0
    D                      7.0   2.0
    C                      4.0   3.0
    Deferred Description   NaN   NaN
    

    我希望得到的结果是:

    In [9]: df
    Out[9]: 
                          col2  col3
    col1                            
    Defenses Description   NaN   NaN
    A                      2.0   0.0
    A                      1.0   1.0
    B                      9.0   9.0
    F                      8.0   4.0
    D                      7.0   2.0
    C                      4.0   3.0
    

    df.shift() df.sort_index() 但这需要对索引进行排序(有几个这样的示例使用 df.loc[-1] = ... df.index = df.index + 1 )。在我的情况下,我需要 Defenses Description

    2 回复  |  直到 8 年前
        1
  •  1
  •   cs95 abhishek58g    8 年前

    你的问题不是循环移位,而是插入的一个更简单的问题(这就是为什么我选择将这个问题标记为重复的原因)。

    pd.concat .

    pd.concat([pd.DataFrame(columns=df.columns, index=['Deferred Description']), df])
    
                         col2 col3
    Deferred Description  NaN  NaN
    A                       2    0
    A                       1    1
    B                       9    9
    F                       8    4
    D                       7    2
    C                       4    3
    

    DataFrame.insert 适用于列但不适用于行的函数。



    np.roll .

    # apply this fix to your existing DataFrame
    pd.DataFrame(np.roll(df.values, 1, axis=0), 
         index=np.roll(df.index, 1), columns=df.columns
    )
    
                         col2 col3
    Deferred Description  NaN  NaN
    A                       2    0
    A                       1    1
    B                       9    9
    F                       8    4
    D                       7    2
    C                       4    3
    

    pd.DataFrame(np.roll(df.values, 1, axis=0))

        2
  •  1
  •   BENY    8 年前

    您可以使用 append

    pd.DataFrame({'col2':[np.nan],'col3':[np.nan]},index=["Deferred Description"]).append(df)
    Out[294]: 
                          col2  col3
    Deferred Description   NaN   NaN
    A                      2.0   0.0
    A                      1.0   1.0
    B                      9.0   9.0
    F                      8.0   4.0
    D                      7.0   2.0
    C                      4.0   3.0