2个数据帧之间的复杂链接

2024-05-14 18:48:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧。首先是我的推荐信

df_ref
ID  REF  VALUE
A   1    12
A   2    36
A   3    95
B   1    54
B   2    67
B   3    81
C   1    89
C   2    123
C   3    14

第二个是我的限制:

df_restrict
ID  V1  V2
A   1   2
B   3   2
C   2   1

我想用df_ref中的(ID, REF)对应的值替换df_restrict中的V1和V2

df_restrict
ID  V1  V2
A   12  36
B   81  67
C   123 89

提前谢谢


Tags: 数据refiddfvaluev2v1restrict
3条回答

我们可以将df_ref旋转到整形,然后将df_restrict的索引设置为ID,然后转置并替换整形后的df_ref中的值

r = df_ref.pivot('REF', 'ID', 'VALUE')
df_restrict.set_index('ID').T.replace(r).T

     V1  V2
ID         
A    12  36
B    81  67
C   123  89

以下是我的建议:

df_restrict['V1']=df_restrict.merge(df_ref, left_on=['ID', 'V1'], right_on=['ID', 'REF'])['VALUE']

df_restrict['V2']=df_restrict.merge(df_ref, left_on=['ID', 'V2'], right_on=['ID', 'REF'])['VALUE']

>>> print(df_restrict)
  ID   V1  V2
0  A   12  36
1  B   81  67
2  C  123  89

melt第二个数据帧,以便merge两列上的值['ID', 'REF'],然后pivot返回到原始形状

df1 = (df_restrict.melt(id_vars=['ID'], value_name='REF')
        .merge(df_ref, how='left')
        .pivot(index='ID', columns='variable', values='VALUE')
        .rename_axis(columns=None))

#     V1  V2
#ID         
#A    12  36
#B    81  67
#C   123  89

相关问题 更多 >

    热门问题