根据联接键重复的数据框行

问题描述

让我们说我有两个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