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 bypage\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列。你能编辑你的答案,这样就不会发生这种情况吗?哦,顺便说一下,数据框中有更多的列,我只是没有在计算中显示它们。我希望最终的输出能够保留它们,看看我刚才对数据帧和预期输出所做的编辑。我真的注意到了这是如何固定计算的。谢谢