python - 使用条件将一个数据帧映射到另一个数据帧

标签 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 中的值必须相等 - 因为它们充当键,并且映射应采用df2 某些列中的值基于 df1 类型中的值。我有两个困难:

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

你有什么建议吗?

最佳答案

df2 上尝试 meltdrop_duplicates。最后,将 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 上,Spades Diamonds(第二行)的 bler 值为 True,因此输出中的VerificationTrue

关于python - 使用条件将一个数据帧映射到另一个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61150879/

相关文章:

python - 只需输入一次 PEM 密码短语

python - 如何向 matplotlib 添加 2D 颜色条或色轮?

r - 使用 R 将来自两个数据框的数据相乘并平均到一列中

python - 写入和读取 csv 文件 python

python - 我想将年龄列中的每个值替换为其中间值

python - 结合 Pandas 的 startwith 和 isin

python - 按组 ID 获取最后第 n 行的值总和

python - 使用 python 进行 Borda 计数?

python - 在 python 中搜索嵌套列表

python - 使用 Pandas 在 HDF 中存储包含字符串的数据帧时的神秘之处