我有一个如下所示的dataFrame:
page_id content name
1 {} John
1 {cat, dog} Anne
2 {} Ethan
3 {} John
3 {sea, earth} Anne
3 {earth, green} Ethan
4 {} Mark
我需要每个content
的{{1}}列的值等于 next {{1} },仅适用于相同的page_id。我想我需要将page_id
函数与content
的分组一起使用,但是我不知道如何将其组合在一起。
预期输出为:
page_id
在此问题上的任何帮助将不胜感激。
答案 0 :(得分:2)
您似乎希望将groupby
与shift
一起使用:
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
答案 1 :(得分:1)
鉴于您对groupby
进行排序,可以避免应用'page_id'
。 shift
之后,所有内容只能使用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