【问题标题】:Rotate rows of a dataframe旋转数据框的行
【发布时间】:2021-12-25 11:07:30
【问题描述】:

我试图旋转数据框的行,其中第一行是最后一行,第二行是第一行,依此类推

原创

A
0 1
1 2
2 3
3 4
4 5
5 6

结果

A
0 6
1 1
2 2
3 3
4 4
5 5

我该怎么做?

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    使用来自 numpy 的 np.roll

    import numpy as np
    
    df['A'] = np.roll(df['A'], 1)
    print(df)
    
    # Output:
       A
    0  6
    1  1
    2  2
    3  3
    4  4
    5  5
    

    【讨论】:

    • 我不知道roll,它是否保持相同的索引?额外 +1 因为某人 -1 每个人都大声笑
    • @CeliusStingher。 Numpy 不关心索引,因此值正确对齐到列中。感谢 +1。
    • 你说得对,我在回答中遇到的导致我不得不 reset_index() 的问题是 iloc[]。感谢您的回答!
    • np.roll 看起来最适合这种情况。直到。来自我的 +1
    • 可以和panda的groupby一起使用吗?
    【解决方案2】:

    我认为您可能需要将np.arange()iloc[] 一起使用。如果您希望索引保持不变,请添加.reset_index()

    df = pd.DataFrame({'A':[1,2,3,4,5,6]})
    df.iloc[np.arange(-1, len(df)-1)].reset_index(drop=True)
    

    返回:

       A
    0  6
    1  1
    2  2
    3  3
    4  4
    5  5
    

    【讨论】:

      【解决方案3】:

      如果您正在寻找仅使用 pandas 的解决方案,这应该可以为您完成工作-

      df = pd.concat([df.iloc[-1:], df.iloc[0:-1]])
      df.reset_index(inplace=True, drop=True)
      

      【讨论】:

      • 我不是投反对票的人,但您的解决方案不起作用。它提供的输出与预期不同。
      • 对我来说效果很好。你能详细说明你想要的东西不是这样吗?我已经添加了重置索引行,也许您希望重置索引。现在可以了吗?
      • 当然可以。在您的解决方案中,df.iloc[1:] 为我们提供了 2 到 6 的元素,而 df.iloc[0:1] 为我们提供了 1。当您使用 pd.concat 时,我们得到一个系列:2、3、4、5、6, 1. 在预期的输出中,我们有:6、1、2、3、4、5。如果你想用你的方法创建它,你应该这样做:pd.concat([df.iloc[-1:], df. iloc[:-1]]).reset_index(drop=True)
      • 您说的完全正确,我误读了这个问题。谢谢,我已经更正了。你得到了这个方法的想法并自己动手:D
      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 2022-01-22
      • 2019-11-14
      相关资源
      最近更新 更多