两个数据框之间的Pandas映射到列中



假设我有一个df1(有更多的列,但只有这一个是相关的):

A
a1
a2
a3

和类似的df2:

A
a1
a3
a4
a7

这种情况是df2在列A中包含df1中的一些值(df1和df2中的列名相同),但不是全部。现在,我想添加一个列"Found in df2?"到一个df1,表示是否找到了该值。例子:

df1
A  Found in df2?
a1       Y
a2       N
a3       Y

我试过np。在哪里和一些合并魔法,但我无法理解这一点。

您可以使用isin:

df['found in df2'] = df['A'].isin(df2['A'].values)
print(df)
A   found in df2
0   a1  True
1   a2  False
2   a3  True

设置
df = pd.DataFrame({'A':['a1','a2','a3']})
df2 = pd.DataFrame({'A':['a1','a3','a4','a7']})

如果使用pandas不能解决您的问题,我建议您将它们转换为列表/数组,这样更容易使用。

这里有一种解决方法:

import pandas as pd
df1 = pd.DataFrame({
'A': [1,2,3]
})
df2 = pd.DataFrame({
'A': [1,3,4,7]
})
df1['Found in df2?'] = ['Y' if x in df2['A'].values else 'N' for x in df1['A'].values]
display(df1)

Pandas merge有一个指示符特性,告诉您在merge的哪一边找到了一个值。

:

dfm = pd.merge(df1, df2[['A']], how="left", indicator=True)
dfm['Found in df2'] = dfm["_merge"] == "both"

你得到一个列_merge,它告诉你"left_only"或";both"这取决于找到A值的位置。如果您想知道哪些值也只在df2中,请使用how="outer"

现在,merge可能会根据a的顺序对df1中的行重新排序。如果需要,请参阅关于SO如何抵消这种情况的其他问题。

相关内容

  • 没有找到相关文章