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

在R语言数据框中匹配相同ID和LOC的记录并合并行数据

合并DataFrame中同ID同LOC的行数据

原始数据

mydata
ID LOC LOC_a LOC_b
1  LAX 1     2
1  LAX 3     4
1  NJ  1     2
2  LAX 1     2
3  NJ  1     2
4  DM  5     6
4  DM  7     8

期望输出

Desired output
ID LOC LOC_a LOC_b LOC_2a LOC_2b
1  LAX 1     2     3      4
1  NJ  1     2
2  LAX 1     2
3  NJ  1     2
4  DM  5     6     7      8

解决方案

用Pandas可以通过分组聚合的方式实现需求,代码如下:

import pandas as pd

# 构造原始DataFrame
data = {
    'ID': [1, 1, 1, 2, 3, 4, 4],
    'LOC': ['LAX', 'LAX', 'NJ', 'LAX', 'NJ', 'DM', 'DM'],
    'LOC_a': [1, 3, 1, 1, 1, 5, 7],
    'LOC_b': [2, 4, 2, 2, 2, 6, 8]
}
mydata = pd.DataFrame(data)

# 按ID和LOC分组,收集每组的LOC_a、LOC_b值为列表
grouped = mydata.groupby(['ID', 'LOC'])[['LOC_a', 'LOC_b']].agg(list)

# 将每组的LOC_a和LOC_b列表合并,扩展为多列并命名
expanded = grouped.apply(lambda x: pd.Series(x['LOC_a'] + x['LOC_b']), axis=1)
expanded.columns = ['LOC_a', 'LOC_b', 'LOC_2a', 'LOC_2b']

# 重置索引,将ID和LOC转为普通列,空值填充为空字符串
result = expanded.reset_index().fillna('')

print(result)

代码说明

  1. 分组聚合:通过groupby(['ID', 'LOC'])将同一ID且同一LOC的行归为一组,用agg(list)把每组的LOC_a、LOC_b值收集成列表;
  2. 扩展列:把每组的LOC_a列表和LOC_b列表合并后转为Series,自动生成对应列,2行的组会生成4个值,1行的组仅生成2个值,剩余位置为NaN;
  3. 整理结果:重置索引恢复ID和LOC列,用fillna('')把空值替换为空白字符串,匹配期望输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:33:20