Python 不合并的两个数据帧之间的父子关系
我正在尝试在两个数据帧之间创建父子关系: df_5: df_4: 以下是我正在使用的代码:Python 不合并的两个数据帧之间的父子关系,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试在两个数据帧之间创建父子关系: df_5: df_4: 以下是我正在使用的代码: df_5.loc[df_5.Tag_Name.isin(df_4.Tag_Name), ['parent']] = df_4[['parent']] 这应该是匹配df_5的Tag_Name列中的值,在df_4中找到它,然后从df_4返回它在df_5中的父值。如上例所示,当行数较多时,这行代码将失败 这里的电流输出如下所示,这是不正确的 df_5: 理想的预期产出应为: df_5: 在这种情况下,是否有一
df_5.loc[df_5.Tag_Name.isin(df_4.Tag_Name), ['parent']] = df_4[['parent']]
这应该是匹配df_5的Tag_Name列中的值,在df_4中找到它,然后从df_4返回它在df_5中的父值。如上例所示,当行数较多时,这行代码将失败
这里的电流输出如下所示,这是不正确的
df_5:
理想的预期产出应为:
df_5:
在这种情况下,是否有一个线性代码可以工作?我希望在不使用pd.merge的情况下简化解决方案,这将为我提供正确的值。您不想使用merge有什么原因吗?您可以将特定列合并到一行中,以提供所需内容。这是您需要的:
pd.merge(df_5[['Tag_Name']],df_4,how='left',on='Tag_Name')
@DavidErickson谢谢。我避免了pd.merge以减少代码中的行数,因为这将在不同级别重复多次。如果没有其他选项,将执行此操作。您也可以使用functools一次执行多个pd合并:
Tag_Name parent
0 Mkt34 1fabfd31-f6aa-4061-a692-35bf6d19c9ae
1 Mkt29 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f
2 Mkt35 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f
3 Mkt30 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f
4 Mkt32 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f
5 Mkt31 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f
6 Mkt36 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f
7 Mkt38 1fabfd31-f6aa-4061-a692-35bf6d19c9ae
8 Mkt39 1fabfd31-f6aa-4061-a692-35bf6d19c9ae
9 Mkt33 1fabfd31-f6aa-4061-a692-35bf6d19c9ae
10 Mkt40 1fabfd31-f6aa-4061-a692-35bf6d19c9ae
11 Mkt37 1fabfd31-f6aa-4061-a692-35bf6d19c9ae
df_5.loc[df_5.Tag_Name.isin(df_4.Tag_Name), ['parent']] = df_4[['parent']]
parent Tag_Name
0 1fabfd31-f6aa-4061-a692-35bf6d19c9ae Mkt30
1 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f Mkt31
2 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f Mkt36
3 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f Mkt37
parent Tag_Name
0 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f Mkt30
1 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f Mkt31
2 edfff48b-a9d6-4c56-84c3-0fb8dab9b88f Mkt36
3 1fabfd31-f6aa-4061-a692-35bf6d19c9ae Mkt37