【问题标题】:Shifting multi-column data to the left Pandas Dataframe [duplicate]将多列数据向左移动 Pandas Dataframe [重复]
【发布时间】:2019-04-20 23:04:43
【问题描述】:

我想让整列数据移到左边。 只有数据应该向左移动 1 次并且列应该是固定的。 你能告诉我该怎么做吗?

初始数据是:

              A1   A2   A3   A4   A5
     #0001    421  000  000  777  888
     #0002    382  403  430  320  055
     #0003    441  304  403  403  403
     #0004    430  403  206  N/A  312
     #0005    N/A  394  493  N/A  403

想要的数据是:

              A1   A2   A3   A4   A5
     #0001    000  000  777  888  N/A
     #0002    403  430  320  055  N/A
     #0003    304  403  403  403  N/A
     #0004    403  206  N/A  312  N/A
     #0005    394  493  N/A  403  N/A

【问题讨论】:

  • stackoverflow.com/a/47898659/4909087 适用于数字数据,请查看链接。
  • @coldspeed 你能写下关于如何在这种情况下使用justify 的评论吗?在删除我的答案之前了解它是如何工作的。
  • @SandeepKadapa 如果它们是数字,您可以简单地将数组传递给justifyv = df.values; v = justify(v); df.values[:] = v
  • @coldspeed Checked 没有给出正确的结果,输出数组包含极值 -2147483648 代替 np.nan。你能验证一下吗?。
  • @coldspeed :这个问题完全不同。这个问题可以通过更简单的答案来解决。

标签: python pandas


【解决方案1】:

试试这个简单的循环:

for i in range(len(df.columns)-1):  # loop till last but one column
    df.iloc[:,i] = df.iloc[:,i+1]   # each column gets values of next column

df[i+1] = np.nan                    # for last column;

输出:

        A1   A2     A3   A4  A5
#0001    0    0  777.0  888 NaN
#0002  403  430  320.0   55 NaN
#0003  304  403  403.0  403 NaN
#0004  403  206    NaN  312 NaN
#0005  394  493    NaN  403 NaN

【讨论】:

    【解决方案2】:

    shift使用双重转置:

    df = df.T.shift(-1,axis=0).T
    
    print(df)
    
              A1     A2     A3     A4  A5
    #0001    0.0    0.0  777.0  888.0 NaN
    #0002  403.0  430.0  320.0   55.0 NaN
    #0003  304.0  403.0  403.0  403.0 NaN
    #0004  403.0  206.0    NaN  312.0 NaN
    #0005  394.0  493.0    NaN  403.0 NaN
    

    其实df.shift(-1,axis=1)应该可以工作,但是代码有bug:

    print(df.shift(-1,axis=1))
              A1     A2     A3  A4  A5
    #0001  777.0    0.0  888.0 NaN NaN
    #0002  320.0  430.0   55.0 NaN NaN
    #0003  403.0  403.0  403.0 NaN NaN
    #0004    NaN  206.0  312.0 NaN NaN
    #0005    NaN  493.0  403.0 NaN NaN
    

    【讨论】:

    • 只需 df.shift(-1, axis=1) 在列上移动。
    • @rushinstuffin 不行,班次代码有bug。
    • 哦,谢谢。我没有意识到这一点。似乎是因为 NaN 值?没有这些,它似乎工作正常。
    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多