考虑数据框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
排序),与给定记录位于同一SCHOOL
和SET
。
如果没有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实现这一目标?
答案 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