首页 > 解决方案 > 匹配 ID 中多个列的值

问题描述

样本 DF:

ID     Match1        Match2        Match3     Match4       Match5
1      Yes           No            Yes        Yes          Yes
2      Yes           No            Yes        Yes          No
2      Yes           No            No         Yes          Yes
3      No            Yes           Yes        Yes          No
3      No            Yes           No         No           No
4      Yes           No            Yes        No           No
4      Yes           No            Yes        Yes          Yes

预期的DF:

 ID     Match1     Match2        Match3     Match4    Match5 Final_Match
    1      Yes      No            Yes        Yes      Yes     Clear
    2      Yes      No            Yes        Yes      No      Unclear
    2      Yes      No            No         Yes      Yes     Unclear
    3      No       Yes           Yes        Yes      No      Clear
    3      No       Yes           No         No       No      Unclear
    4      Yes      No            Yes        No       No      Unclear
    4      Yes      No            Yes        Yes      Yes     Clear

问题陈述:

  1. 如果 ID 是非重复的,只需放在Clear列中Final_Match(示例 ID 1)
  2. 如果 ID 是重复的,则Yes在 Match1 到 Match5 列中的 ID 计数内,以该列和另一列的“是”较大者为准ClearUnclear示例 ID 3 和 4

  3. 如果 ID 是重复的,则Yes在 Match1 到 Match5 列中的 ID 计数内,如果它们Unclear在两个列中都有相同的“是”(示例 ID 2)

我找不到任何关于如何在 ID 中解决的问题?

标签: pythonpandas

解决方案


您也可以使用以下方法实现此目的Groupby.rank

# Helper Series
s = (df.replace({'Yes': 1, 'No': 0})
     .iloc[:, 1:]
     .sum(1))

df['final_match'] = np.where(s.groupby(df['ID']).rank(ascending=False).eq(1), 'Clear', 'Unclear')

推荐阅读