使用 Concat 将移位系列连接到 Dataframe

Shifted Series Join to Dataframe with Concat

有一个 DataFrame z

['title','module_number','beginners','finishers'] 

列。我需要移动 z.beginners 系列,因为每个最后一个 module_number 应该在那里有 NaN,并将它作为新列加入 DataFrame z.shift.

我已经尝试用 pd.concat 做到这一点。我的代码:

def exp2(df):
    
    fx = df.join(df.beginners[1:].rename('shifted').reset_index()).drop('index', axis =1)
    return fx

def exp3(z,lst):
    
    common = list()
    
    for title in lst:

        df = z[z['title'] == title]
        example = exp2(df)
        common.append(example)
        
    return pd.concat(common)

exp3(z, z.title.unique())

仅对 z 中的第一个标题有效,对第二个标题无效。但是,它不适用于任何其他标题:

        title module_number beginners finishers shift
    0   Uu    1             518       458       434
    1   Uu    2             434       406       NaN
    3   Kk    1             627       563       27
    4   Kk    2             521       427       NaN
    5   Rr    1             158       142       NaN
    6   Rr    2             136       106       NaN

有谁知道替代解决方案或如何增强我的代码?

我只是用没有循环的方式完成的:

shifted = z.beginners.where(z.module_number != 1)[1:]
z.join(shifted.rename('shifted').reset_index()).drop('index',axis = 1)