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

如何使用Pandas基于多条件将多行合并为一行

解决DataFrame按Phone+Email合并多行的问题

嘿,这问题我之前也碰到过,用Pandas的分组聚合就能轻松搞定!核心思路就是把phone和email作为分组依据,把同一组里的entity和account_no字段合并到一行。下面一步步给你演示:

步骤1:准备数据(模拟你的示例)

先把你给的示例数据转成Pandas DataFrame,修正了原数据里可能的排版误差(确保匹配行的phone+email完全一致):

import pandas as pd

data = {
    'entity': ['E01', 'E02', 'E03', 'E04', 'E05', 'E06', 'E07', '', '', '', '', ''],
    'phone': ['22', '33', '55', '66', '77', '88', '100', '22', '33', '55', '66', '99'],
    'email': ['minhkhang@gmail.com', 'hoangyen@gmail.com', 'tmai@hotmail.com', 'thuthao@gmail.com',
              'lamanh@gmail.com', 'tuantu@gmail.com', 'maidao@gmail.com', 'minhkhang@gmail.com',
              'hoangyen@gmail.com', 'thanh mai@gmail.com', 'tthao@hotmail.com', 'hoangkien@gmail.com'],
    'account_no': ['', '', '', '', 'M05', 'M06', '', 'M01', 'M02', 'M03', 'M04', 'M07']
}

df = pd.DataFrame(data)

步骤2:处理空值

把数据里的空字符串换成Pandas的pd.NA,方便后续分组和聚合时正确忽略空值:

df = df.replace('', pd.NA)

步骤3:分组合并核心操作

用groupby按phone和email分组,对entity和account_no做聚合——把同一组里的非空值用空格拼接起来(如果不需要去重,去掉.unique()即可):

merged_df = df.groupby(['phone', 'email'], dropna=False).agg(
    entity=('entity', lambda x: ' '.join(x.dropna().unique())),
    account_no=('account_no', lambda x: ' '.join(x.dropna().unique()))
).reset_index(drop=True)

步骤4:还原空字符串格式

最后把pd.NA换回空字符串,和你期望的结果格式对齐:

merged_df = merged_df.fillna('')

最终结果

运行完上面的代码,你就能得到和示例一致的结果:

entity account_no
0    E01        M01
1    E02        M02
2    E03        M03
3    E04        M04
4    E05        M05
5    E06        M06
6    E07           
7              M07

补充说明

  • 如果你的原始数据里空值本来就是NaN而不是空字符串,可以跳过步骤2。
  • 要是合并时需要用其他分隔符(比如逗号),把' '换成', '就行。
  • dropna=False参数是为了保留那些phone或email为空的行,如果不需要可以去掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:13:12