我想将一个数据帧映射到另一个数据帧,尽管这并不那么简单,因为我使用 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 类型中的值。我有两个困难:
- 映射需要两列,因此我无法找到使用 pandas.series.map 的方法;此外,我无法在这种情况下应用 Dataframe.loc[conditions] 以便条件比较 df1 和 df2。
- 上面的例子很短,但是我正在处理的数据集有 A 和 B 的值的多种组合,因此为每种类型编写 A、B 和值之间的关联函数是不合理的。里>
你有什么建议吗?
最佳答案
在 df2
上尝试 melt
和 drop_duplicates
。最后,将 merge
df1 留给 melt
和 drop_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
,因此输出中的Verification
为True
关于python - 使用条件将一个数据帧映射到另一个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61150879/