python - 如何在 python 中匹配数据框的行,根据正确匹配创建新列?
问题描述
在带有数据框的python中工作,我正在尝试匹配某些行并根据成功匹配创建一个新列 - 例如,如果'Breed' + 'Color'匹配,则将匹配行的'Name'放在'Mate'列中男对中。例如,在下表中 Adam/Eve 和 Antony/Cleopatra 应该匹配,导致 Eve 和 Cleopatra 分别被放入 Adam 和 Antony 的“伴侣”列。由于 Clyde 和 Beauty 有不同的品种,因此不会发生这种情况。
姓名 | 品种 | 颜色 | 性别 | 伴侣? |
---|---|---|---|---|
亚当 | 拳击手 | 白色的 | 男性 | (前夕) |
前夕 | 拳击手 | 白色的 | 女性 | |
安东尼 | 实验室 | 巧克力 | 男性 | (埃及艳后) |
克娄巴特拉 | 实验室 | 巧克力 | 女性 | |
克莱德 | 沙哑 | 灰色的 | 男性 | |
美丽 | 斗牛犬 | 灰色的 | 女性 |
谢谢!!
解决方案
from collections import defaultdict
# First collect the Potential names of mates
mates = defaultdict(list)
for row in df.itertuples():
props = (row.Breed, row.Color)
mates[props].append(row.Name)
# Secondly create Mate column
def return_mates(name, breed, color):
match = (breed, color)
return [m for m in mates[match] if m != name]
df.loc[:, 'Mate'] = df[['Name', 'Breed', 'Color']].apply(lambda x: return_mates(*x), axis=1)
推荐阅读
- d3.js - D3js - 具有二进制值的折线图
- android - 如何在 Android 上的 Firebase 数据库中存储用户 Uid?
- angular - 如何将自定义配置传递给 ngx-imageviewer
- javascript - 在多个查询中使用 document.querySelectorALL 添加/删除类
- r - 如何编写一个 for 循环来解析 R 中的三个不同变量?
- databricks - Databricks - 如何将驱动程序日志复制到我的机器上?
- c# - 显示垂直滚动条时控制位置发生变化
- abap - 方法“GET_DATA_REF”不存在(cl_salv_bs_runtime_info),为什么?
- python - python请求-删除请求
- c# - RSACryptoServiceProvider 在 .net 核心中不起作用