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

如何处理Pandas DataFrame实现一行对应一个地址,关联信息分列?

解决方案:实现一行对应一个地址,拆分关联联系人信息为独立列

核心思路

针对当前数据中一个地址对应多条联系人记录的情况,我们可以通过「分组编号+透视转宽表」的方式,自动生成对应数量的姓名、电话、邮箱列,无需提前确定列数。


完整实现步骤及代码

1. 给每个地址下的联系人添加序号

假设你的df中,地址列名为address,联系人相关列是name、phone、email(请替换为你实际的列名):

# 按地址分组,为每组内的联系人分配递增序号
df['contact_idx'] = df.groupby('address').cumcount() + 1

2. 透视转宽表,生成独立联系人列

通过透视将同一地址下的多组联系人信息拆分为name_1、phone_1、email_1这类格式的列:

# 生成透视表,行保留地址(可追加其他需保留的非联系人字段),列由序号+字段名组成
pivoted_df = df.pivot(
    index=['address'],  # 此处可添加其他和地址绑定的字段,如address_id、create_time等
    columns='contact_idx',
    values=['name', 'phone', 'email']
)

# 重命名列,简化为「字段名_序号」的格式
pivoted_df.columns = [f'{col[0]}_{col[1]}' for col in pivoted_df.columns]

# 将地址从索引转回普通列
final_df = pivoted_df.reset_index()

3. 合并非联系人元数据(可选)

如果原df中还有和地址一一对应的其他字段(如地址ID、创建时间),先提取唯一值再合并:

# 提取地址对应的唯一元数据
metadata_df = df.drop_duplicates('address')[['address', 'address_id', 'create_time']]

# 合并到最终结果表
final_df = pd.merge(metadata_df, final_df, on='address', how='left')

模拟示例验证

假设你的df结构如下:

import pandas as pd

# 模拟数据
sample_data = [
    {'address': '北京市朝阳区XX路1号', 'name': '张三', 'phone': '138xxxx1234', 'email': 'zhangsan@xxx.com'},
    {'address': '北京市朝阳区XX路1号', 'name': '李四', 'phone': '139xxxx5678', 'email': 'lisi@xxx.com'},
    {'address': '上海市浦东新区XX街2号', 'name': '王五', 'phone': '137xxxx9012', 'email': 'wangwu@xxx.com'}
]
df = pd.DataFrame(sample_data)

# 执行处理流程
df['contact_idx'] = df.groupby('address').cumcount() + 1
pivoted_df = df.pivot(index='address', columns='contact_idx', values=['name', 'phone', 'email'])
pivoted_df.columns = [f'{col[0]}_{col[1]}' for col in pivoted_df.columns]
final_df = pivoted_df.reset_index()

print(final_df)

输出结果:

address name_1    phone_1          email_1 name_2    phone_2          email_2
0  北京市朝阳区XX路1号    张三  138xxxx1234  zhangsan@xxx.com    李四  139xxxx5678   lisi@xxx.com
1  上海市浦东新区XX街2号    王五  137xxxx9012  wangwu@xxx.com    NaN        NaN             NaN

关键说明

  • 无需提前确定列数:groupby.cumcount()会自动根据每个地址下的联系人数量生成序号,透视后自动匹配列数,空值位置可通过final_df.fillna('')替换为空字符串。
  • 适配你的前置处理:你已经通过explode将嵌套的联系人数据拆分为多行,上述流程可直接衔接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:07:20