首页 > 解决方案 > 如何在 python 中匹配数据框的行,根据正确匹配创建新列?

问题描述

在带有数据框的python中工作,我正在尝试匹配某些行并根据成功匹配创建一个新列 - 例如,如果'Breed' + 'Color'匹配,则将匹配行的'Name'放在'Mate'列中男对中。例如,在下表中 Adam/Eve 和 Antony/Cleopatra 应该匹配,导致 Eve 和 Cleopatra 分别被放入 Adam 和 Antony 的“伴侣”列。由于 Clyde 和 Beauty 有不同的品种,因此不会发生这种情况。

姓名 品种 颜色 性别 伴侣?
亚当 拳击手 白色的 男性 (前夕)
前夕 拳击手 白色的 女性
安东尼 实验室 巧克力 男性 (埃及艳后)
克娄巴特拉 实验室 巧克力 女性
克莱德 沙哑 灰色的 男性
美丽 斗牛犬 灰色的 女性

谢谢!!

标签: pythonpandasnumpy

解决方案


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)

推荐阅读