将列分组的值按DataFrame的另一列移动

时间:2019-09-12 14:07:39

标签: python pandas dataframe

我有一个如下所示的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

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

2 个答案:

答案 0 :(得分:2)

您似乎希望将groupbyshift一起使用:

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