You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:基于其他列差异提取DataFrame唯一行的需求

解决同一国家内等价政党去重问题

针对你给出的DataFrame,需要在同一国家范围内,对满足以下条件的等价政党行去重:

  • 同一国家中,Country-A-C匹配但B值不同
  • 同一国家中,Country-B-C匹配但A值不同
    最终保留每组等价政党中首次出现的行。

实现步骤

这里用pandas结合networkx的连通分量来处理,核心思路是把同一国家内的等价政党行视为连通节点,每个连通组只保留最早出现的行。

1. 准备示例数据

import pandas as pd
import networkx as nx

# 构造你的原始DataFrame
df = pd.DataFrame({
    'Country': ['HONDURAS', 'HONDURAS', 'NICARAGUA', 'CHILE', 'HONDURAS', 'HONDURAS'],
    'A': ['PL', 'PN', 'PN', 'PN', 'PNH', 'PNH'],
    'B': ['Partido Liberal', 'Partido Nacional de Honduras', 'Partido Nacional', 'Partido Nacional', 'Partido Nacional', 'Partido Nacional de Honduras'],
    'C': [12.0, 17.33, 12.0, 17.33, 17.33, 17.33]
})

2. 定义去重函数

这个函数会处理单个国家的分组,把等价的行通过图的连通分量归类,然后保留每组的首行:

def deduplicate_party(group):
    # 创建图,每行的索引作为节点
    G = nx.Graph()
    G.add_nodes_from(group.index)
    
    # 遍历行对,为等价行添加连接边
    for i in group.index:
        for j in group.index:
            if i >= j:
                continue
            # 判断是否属于同一等价组:A+C相同 或 B+C相同
            if (group.loc[i, 'A'] == group.loc[j, 'A'] and group.loc[i, 'C'] == group.loc[j, 'C']) or \
               (group.loc[i, 'B'] == group.loc[j, 'B'] and group.loc[i, 'C'] == group.loc[j, 'C']):
                G.add_edge(i, j)
    
    # 提取每个连通组的首个索引(最早出现的行)
    unique_indices = []
    for component in nx.connected_components(G):
        unique_indices.append(min(component))
    
    # 返回去重后的分组,保持原顺序
    return group.loc[unique_indices].sort_index()

3. 分组应用去重并输出结果

按Country分组后应用函数,得到最终结果:

result = df.groupby('Country', group_keys=False).apply(deduplicate_party)
print(result)

输出结果:

Country    A                          B      C
0     HONDURAS   PL           Partido Liberal  12.00
1     HONDURAS   PN  Partido Nacional de Honduras  17.33
2  NICARAGUA   PN          Partido Nacional  12.00
3        CHILE   PN          Partido Nacional  17.33

补充说明

  • 不同国家的同名政党、同C值政党会被保留,因为分组是按Country进行的
  • 连通分量的方式能准确识别所有间接关联的等价行(比如HONDURAS的PN和PNH,通过B值关联成同一组)

内容的提问来源于stack exchange,提问作者flâneur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:28