假设我有两个数据帧d1d2,它们可以使用下面的代码生成.

d1 = pd.DataFrame({'c1':['A', 'B', 'C', 'D', 'E', 'F'],
                            'c2': ['G', 'H', 'I', 'J', 'K', 'L'],
                            'val':[10, 20, 30, 40, 50, 60]})

d2 = pd.DataFrame({'c1':['A', 'B', 'C', 'D', 'E', 'F'],
                     'c2': ['H', 'H', 'I', 'J', 'L', 'K'],
                     'c1_found' : [1, 1, 1, 1, 1, 1],
                     'c2_found' : [1, 1, 1, 1, 1, 1]})

我想通过判断表d1中是否同时存在c1c2组合来创建列c1_c2_found.

我可以使用下面的代码实现这一点.有没有更优化的方法(矢量化方法)可以用来解决这个问题?

# Check if both 'c1' and 'c2' values in d1 exist in d2
merged_data = pd.merge(d2, d1, on=['c1', 'c2'], how='inner')

d2['c1_c2_found'] = d2.apply(lambda row: 1 if (row['c1'], row['c2']) in zip(merged_data['c1'], merged_data['c2']) else 0, axis=1)

推荐答案

IIUC您可以对d2进行left合并:

d2 = d2.merge(d1, on=["c1", "c2"], how="left")
d2["c1_c2_found"] = d2.pop("val").notna().astype(int)
print(d2)

打印:

  c1 c2  c1_found  c2_found  c1_c2_found
0  A  H         1         1            0
1  B  H         1         1            1
2  C  I         1         1            1
3  D  J         1         1            1
4  E  L         1         1            0
5  F  K         1         1            0

Python相关问答推荐

即使在可见的情况下也不相互作用

替换字符串中的多个重叠子字符串

未删除映射表的行

如何使用Python以编程方式判断和检索Angular网站的动态内容?

Odoo 16使用NTFS使字段只读

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

在单个对象中解析多个Python数据帧

如何启动下载并在不击中磁盘的情况下呈现响应?

基于形状而非距离的两个numpy数组相似性

如何在PySide/Qt QColumbnView中删除列

Polars将相同的自定义函数应用于组中的多个列,

跳过嵌套JSON中的级别并转换为Pandas Rame

如何找出Pandas 图中的连续空值(NaN)?

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

Tensorflow tokenizer问题.num_words到底做了什么?

如何获得满足掩码条件的第一行的索引?

Pandas:将值从一列移动到适当的列

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

来自任务调度程序的作为系统的Python文件