我有两个数据帧:

d1={'A':[1,3,5,7,8,4,6],'B':[6,4,3,8,1,7,4], 'C':[2,5,8,9,8,4,7]}

df1=pd.DataFrame(data=d1)

d2={'a':[2,8,6,5,7],'b':[6,4,9,3,2]}

df2=pd.DataFrame(data=d2)

现在,我想看看df2的哪些"a"和"b"值与df1的"A"和"B"值相同.对于df1的第三行和df2[5,3]的第四行都是如此,因此第result列将是df2中的一个新列,表示为True. 数据帧具有不同的长度和不同的列数.我知道有一个函数"ISIN",当我在一个列中搜索模式时,我可以应用它,而不是同时在两个列中搜索模式.我还发现了Indicator=True的函数"Merge",但只有在数据帧具有相同的列数时才能理解如何应用它. 在这种情况下,如果能帮上忙,我将非常感激.

推荐答案

您确实可以使用indicator=True和左合并,这将为您提供一个包含bothleft_only的新列.您只需转换为布尔值:

out = (df2
    .merge(df1[['A', 'B']].set_axis(['a', 'b'], axis=1),
           how='left', indicator=True)
    .assign(result=lambda d: d.pop('_merge').eq('both'))
)

输出:

   a  b  result
0  2  6   False
1  8  4   False
2  6  9   False
3  5  3    True
4  7  2   False

不弹出_merge列的中级:

   a  b     _merge  result
0  2  6  left_only   False
1  8  4  left_only   False
2  6  9  left_only   False
3  5  3       both    True
4  7  2  left_only   False

如果要将输出指定为新的df2列,则为VARIANT:

df2['result'] = (df2
    .reset_index()
    .merge(df1[['A', 'B']].set_axis(['a', 'b'], axis=1)
                          .drop_duplicates(),
           how='left', indicator=True)
    .set_index('index')['_merge'].eq('both')
)

Python相关问答推荐

更改matplotlib彩色条的字体并勾选标签?

线性模型PanelOLS和statmodels OLS之间的区别

scikit-learn导入无法导入名称METRIC_MAPPING64'

在Python中动态计算范围

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

给定高度约束的旋转角解析求解

如何根据一列的值有条件地 Select 前N组?

实现神经网络代码时的TypeError

合并帧,但不按合并键排序

在两极中过滤

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

从旋转的DF查询非NaN值

Python Mercury离线安装

用由数据帧的相应元素形成的列表的函数来替换列的行中的值

迭代工具组合不会输出大于3的序列

对列中的数字进行迭代,得到n次重复开始的第一个行号

Sknowled线性回归()不需要迭代和学习率作为参数

如何将参数名作为参数传入到函数中?

Pandas:新列,从列表中采样,基于列值

IpyWidget Select 框未打开