Python 按数据帧的另一列移动列分组的值

Python 按数据帧的另一列移动列分组的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个如下所示的数据帧: page_id content name 1 {} John 1 {cat, dog} Anne 2 {} Ethan 3 {} John 3 {sea, earth} Anne 3 {earth, green} Et

我有一个如下所示的数据帧:

page_id      content         name
1            {}              John
1            {cat, dog}      Anne
2            {}              Ethan
3            {}              John
3            {sea, earth}    Anne
3            {earth, green}  Ethan
4            {}              Mark
我需要每个
页面id
内容
列的值等于下一个
页面id
内容
列的值,仅适用于相同的页面id。我想我需要使用
shift()
函数al和group by
page\u id
,但我不知道如何将其组合在一起

预期产出将是:

page_id      content         name
1            {cat, dog}      John
1            NaN             Anne
2            NaN             Ethan
3            {sea, earth}    John
3            {earth, green}  Anne
3            NaN             Ethan
4            NaN             Mark

在此问题上的任何帮助都将不胜感激。

看起来您需要一个带有
shift
groupby

df['content'] = df.groupby('page_id').content.apply(lambda x: x.shift(-1))

     page_id         content
0      1.0      {cat, dog}
1      NaN             NaN
2      NaN             NaN
3      3.0    {earth, sea}
4      3.0  {green, earth}
5      NaN             NaN
6      NaN             NaN

如果您在
'page\u id'
上进行排序,则可以避免使用
groupby
应用<代码>移位然后仅使用
where
设置组内的值。随着组的数量越来越多,这将快得多

df['content'] = df.content.shift(-1).where(df.page_id.eq(df.page_id.shift(-1)))

   page_id         content   name
0        1      {cat, dog}   John
1        1             NaN   Anne
2        2             NaN  Ethan
3        3    {earth, sea}   John
4        3  {earth, green}   Anne
5        3             NaN  Ethan
6        4             NaN   Mark

很接近,但我不希望shift()作用于page\u id列。你能编辑你的答案,这样就不会发生这种情况吗?哦,顺便说一下,数据框中有更多的列,我只是没有在计算中显示它们。我希望最终的输出能够保留它们,看看我刚才对数据帧和预期输出所做的编辑。我真的注意到了这是如何固定计算的。谢谢