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

Python Pandas实现重复站点与对应所有者的有序匹配

Pandas 有序生成重复站点及对应所有者列

原始数据

import pandas as pd
df = pd.DataFrame({
    'Lineup ID':['1691', '1691', '1691', '1691', '1691', '1691'],
    'Station':['WRCB', 'WAAY', 'WXIA', 'WAFF', 'WTVC', 'WPXA'],
    'Affiliation':['NBC', 'NBC', 'NBC', 'ABC', 'ABC', 'ION'],
    'Owner':['Sarkes', 'Gray', 'Tegna', 'Allen', 'Sinclair', 'Scripps'],
})

需求

  • 新增Duplicate Station列:显示与当前行Lineup ID和Affiliation相同的其他站点,多个站点用逗号分隔
  • 新增Duplicate Owner列:对应上述重复站点的所有者,需与Duplicate Station的顺序完全一致;若该分组无其他站点则为空

当前问题

使用分组聚合set的方式实现时,站点和所有者的顺序无法匹配(例如WXIA行的所有者顺序与站点顺序不对应),因为set是无序结构,会打乱原始数据的顺序。

解决方案

通过分组后保留原始顺序的列表,再逐行筛选排除自身的方式实现:

# 按Lineup ID和Affiliation分组,生成每个组的站点列表和所有者列表
grouped = df.groupby(['Lineup ID', 'Affiliation']).apply(
    lambda x: pd.Series({
        'station_list': x['Station'].tolist(),
        'owner_list': x['Owner'].tolist()
    })
).reset_index()

# 将分组结果合并回原DataFrame
df = df.merge(grouped, on=['Lineup ID', 'Affiliation'], how='left')

# 生成Duplicate Station和Duplicate Owner列
def get_duplicates(row):
    # 获取当前站点在列表中的索引
    idx = row['station_list'].index(row['Station'])
    # 复制列表并移除当前站点/所有者
    dup_stations = row['station_list'][:idx] + row['station_list'][idx+1:]
    dup_owners = row['owner_list'][:idx] + row['owner_list'][idx+1:]
    # 转为逗号分隔的字符串,无重复则为空
    return ','.join(dup_stations), ','.join(dup_owners)

df[['Duplicate Station', 'Duplicate Owner']] = df.apply(get_duplicates, axis=1, result_type='expand')

# 清理临时列
df = df.drop(['station_list', 'owner_list'], axis=1)

结果展示

处理后的DataFrame如下:

Lineup IDStationAffiliationOwnerDuplicate StationDuplicate Owner
1691WRCBNBCSarkesWAAY,WXIAGray,Tegna
1691WAAYNBCGrayWRCB,WXIASarkes,Tegna
1691WXIANBCTegnaWRCB,WAAYSarkes,Gray
1691WAFFABCAllenWTVCSinclair
1691WTVCABCSinclairWAFFAllen
1691WPXAIONScripps

原理说明

  1. 分组时使用tolist()保留原始数据的顺序,避免set的无序性
  2. 通过索引定位当前行在分组列表中的位置,精准排除自身,确保剩余站点和所有者的顺序完全对应
  3. 使用apply逐行处理,最终拼接成符合要求的字符串格式

内容的提问来源于stack exchange,提问作者Jpdiv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:43:20