问题描述
让我们说我有两个df-老师和部门
teacher_id,name,dep_id
1,ABC,10
2,XYZ,20
dep_id
10
20
40
50
我想为缺少的部门重复教师行。因此输出应为:
teacher_id,10
1,20
1,40
1,50
2,20
2,40
2,50
外部加入并与大熊猫合并将为老师ID和名称添加一个NaN。我想重复这些值。任何想法如何做到这一点简单?
解决方法
您可以将df.groupby
与带有自定义功能的Groupby.apply
一起使用,该功能可以过滤掉丢失的dep_id
,然后使用pd.concat
将它们分别添加到teacher_id
中并使用{{3 }}
#df
# teacher_id name dep_id
#0 1 ABC 10
#1 2 XYZ 20
#df1
# dep_id
#0 10
#1 20
#2 40
#3 50
def fill(df):
m = df1['dep_id'].isin(df['dep_id'])
missing = df1.loc[~m]
return pd.concat([df,missing]).ffill()
df.groupby('teacher_id',group_keys=False).apply(fill)
teacher_id name dep_id
0 1.0 ABC 10
1 1.0 ABC 20
2 1.0 ABC 40
3 1.0 ABC 50
1 2.0 XYZ 20
0 2.0 XYZ 10
2 2.0 XYZ 40
3 2.0 XYZ 50