我有一个数据框df
,看起来像:
name year dept metric
0 Steve Jones 2018 A 0.703300236
1 Steve Jones 2019 A 0.255587222
2 Jane Smith 2018 A 0.502505934
3 Jane Smith 2019 B 0.698808749
4 Barry Evans 2019 B 0.941325241
5 Tony Edwards 2017 B 0.880940126
6 Tony Edwards 2018 B 0.649086123
7 Tony Edwards 2019 A 0.881365905
我想创建 2 个新的数据框,其中包含某人从部门 A 移动到 B 的记录和另一个人从部门 B 移动到 A 的记录。因此我想要的输出是:
name year dept metric
0 Jane Smith 2018 A 0.502505934
1 Tony Edwards 2019 B 0.649086123
name year dept metric
0 Jane Smith 2019 B 0.698808749
1 Tony Edwards 2018 B 0.881365905
某人在旧部门的最后一年的记录被捕获在一个数据框中,而新部门的第一年仅在另一个数据框中捕获。这些记录按名称和年份排序,因此顺序正确。
我已经尝试过:
for row in agg_data.rows:
df['match'] = np.where(df.dept == 'A' and df.dept.shift() =='B','1')
df['match'] = np.where(df.dept == 'B' and df.dept.shift() =='A','2')
然后将记录选择到数据框中,但我让它工作。
最佳答案
我相信你需要:
df = df[df.groupby('name')['dept'].transform('nunique') > 1]
df = df.drop_duplicates(['name','dept'], keep='last')
df1 = df.drop_duplicates('name')
print (df1)
name year dept metric
2 Jane Smith 2018 A 0.502506
6 Tony Edwards 2018 B 0.649086
df2 = df.drop_duplicates('name', keep='last')
print (df2)
name year dept metric
3 Jane Smith 2019 B 0.698809
7 Tony Edwards 2019 A 0.881366
关于python - 回顾数据框中的上一行并选择特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56214582/