Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于联接键复制数据帧行_Python_Pandas_Join_Merge - Fatal编程技术网

Python 基于联接键复制数据帧行

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和姓名。我想复制这些值。有没有办法做到这一点?您可以使

假设我有两个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和姓名。我想复制这些值。有没有办法做到这一点?

您可以使用自定义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