使用条件将数据框映射到另一个

时间:2020-04-11 01:08:05

标签: python pandas dataframe

我想将一个数据帧映射到另一个数据帧,尽管它不是那么简单,因为我使用2个条件来执行映射-我将在下面解释它们。基本上,我想做的是给定两个数据帧df1和df2,这样:

df1:

A       B        Type
Heart   Spades   Boo
Heart   Clubs    Fog
Spades  Diamonds Bler

df2:

A       B        Boo    Fog     Bler
Heart   Spades   True   True    True
Spades  Diamonds True   False   True
Heart   Spades   True   True    False

我可以将'Boo','Fog,'Bler'列中包含的值映射到df1中名为'Verification'的新列中,结果是:

A       B           Type    Verification
Heart   Spades      Boo     True
Heart   Clubs       Fog 
Spades  Diamonds    Bler    True

然后,要执行此过程,我需要满足2个条件:A和B列的df1中的值和df2中的值必须相等-因为它们充当键,并且映射应采用基于df1类型的值的df2某列中的值。我遇到两个困难:

  1. 该映射需要两列,因此我无法找出使用pandas.series.map的方法;此外,在这种情况下,我无法应用Dataframe.loc [conditions]以便条件可以比较df1和df2。
  2. 上面的示例很短,但是我正在处理的数据集具有A和B值的几种组合,因此为每种类型编写A,B和值之间的关联函数是不合理的。 / li>

您有什么建议吗?

1 个答案:

答案 0 :(得分:2)

melt上尝试drop_duplicatesdf2。最后,将merge df1留给meltdrop_duplicates

的结果
df_final = (df1.merge(df2.melt(['A','B'], var_name='Type', value_name='Verification')
                         .drop_duplicates(['A','B','Type']), how='left'))

Out[240]:
        A         B  Type Verification
0   Heart    Spades   Boo         True
1   Heart     Clubs   Fog          NaN
2  Spades  Diamonds  Bler         True

注意:在df2上,bler(第二行)的Spades Diamonds的值为True,因此其{{1} }在输出中为Verification