Pandas合并在数据帧的子组中

时间:2018-03-18 20:59:04

标签: python pandas dataframe group-by pandas-groupby

考虑数据框df

   SCHOOL  ID  SET  NAME
0  Foo     1   0    Ben
1  Foo     2   0    Ben
2  Foo     3   1    Chris
3  Foo     4   1    Joe
4  Foo     5   0    Tom
5  Bar     1   0    Harry
6  Bar     2   1    Jeff
7  Bar     3   0    George
8  Bar     4   1    Tom

我想创建新的数据框

   SCHOOL  ID  SET  NAME    PREV_NAME
0  Foo     1   0    Ben     None
1  Foo     2   0    Ben     Ben
2  Foo     3   1    Chris   None
3  Foo     4   1    Joe     Chris
4  Foo     5   0    Tom     Ben
5  Bar     1   0    Harry   None
6  Bar     2   1    Jeff    None
7  Bar     3   0    George  Harry
8  Bar     4   1    Tom     Jeff

其中PREV_NAME是先前的NAME(按ID排序),与给定记录位于同一SCHOOLSET

如果没有SET条件,那么我可以做类似

的事情
df_copy = df.copy()
df_copy['ID'] = df_copy['ID'] + 1
df.merge(df_copy, on=['SCHOOL', 'ID'], how='left')

由于存在SET条件,我们需要一种方法对每个唯一(SCHOOL, SET)对进行分组,然后应用上述合并(注意我们不能再使用ID)新指数。

如何使用Pandas实现这一目标?

1 个答案:

答案 0 :(得分:1)

好像你想groupby上的shift + NAME -

df['PREV_NAME'] = df.groupby(['SCHOOL' ,'SET']).NAME.shift()
df

  SCHOOL  ID  SET    NAME PREV_NAME
0    Foo   1    0     Ben       NaN
1    Foo   2    0     Ben       Ben
2    Foo   3    1   Chris       NaN
3    Foo   4    1     Joe     Chris
4    Foo   5    0     Tom       Ben
5    Bar   1    0   Harry       NaN
6    Bar   2    1    Jeff       NaN
7    Bar   3    0  George     Harry
8    Bar   4    1     Tom      Jeff