Python 基于联接键复制数据帧行
假设我有两个dfs-教师和系Python 基于联接键复制数据帧行,python,pandas,join,merge,Python,Pandas,Join,Merge,假设我有两个dfs-教师和系 teacher_id, name, dep_id 1, ABC, 10 2, XYZ, 20 我想复制缺失部门的教师行。因此,输出需要: teacher_id, name, dep_id 1, ABC, 10 1, ABC, 20 1, ABC, 40 1, ABC, 50 2, XYZ, 20 2, XYZ, 10 2, XYZ, 40 2, XYZ, 50 外部加入和合并熊猫将放置一个NaN作为教师id和姓名。我想复制这些值。有没有办法做到这一点?您可以使
teacher_id, name, dep_id
1, ABC, 10
2, XYZ, 20
我想复制缺失部门的教师行。因此,输出需要:
teacher_id, name, dep_id
1, ABC, 10
1, ABC, 20
1, ABC, 40
1, ABC, 50
2, XYZ, 20
2, XYZ, 10
2, XYZ, 40
2, XYZ, 50
外部加入和合并熊猫将放置一个NaN作为教师id和姓名。我想复制这些值。有没有办法做到这一点?您可以使用自定义func,它可以过滤掉缺少的dep\u id
,然后将它们添加到各自的teacher\u id
使用和使用中
@它不是真正的笛卡尔连接。如果我有一个额外的教师行(1,ABC,20),笛卡尔连接将给出12行作为3行教师x 4个部门。实际输出只有8行。现在理解了,谢谢澄清。发布了一个答案,看看是否适合你;)
teacher_id, name, dep_id
1, ABC, 10
1, ABC, 20
1, ABC, 40
1, ABC, 50
2, XYZ, 20
2, XYZ, 10
2, XYZ, 40
2, XYZ, 50
#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