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

如何基于条件从DataFrame中提取父ID与子ID并汇总?

实现DataFrame汇总的最优方法

示例数据

先构造你的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'id': [1,2,3,4,5,6,7,8],
    'mobile_number': [123,123,123,456,789,789,1234,789],
    'to_be_deleted': [0,1,1,0,0,1,0,1]
})

最优实现步骤

核心思路是分组聚合+左连接,利用pandas内置方法高效完成:

  1. 提取parent记录:筛选to_be_deleted=0的行,保留id和mobile_number,并将id重命名为parent_id
parents = df[df['to_be_deleted'] == 0][['id', 'mobile_number']].rename(columns={'id': 'parent_id'})
  1. 聚合child记录:筛选to_be_deleted=1的行,按mobile_number分组,将同一组的id用逗号拼接成字符串
children = df[df['to_be_deleted'] == 1].groupby('mobile_number')['id'].agg(lambda x: ', '.join(map(str, x))).reset_index(name='child_id')
  1. 左连接合并结果:将parent表和聚合后的child表按mobile_number左连接,确保所有parent记录都被保留,没有child的自动填充NaN(对应你期望的null)
result = parents.merge(children, on='mobile_number', how='left').drop(columns='mobile_number')

最终结果

运行上述代码后,result就是你需要的汇总DataFrame:

parent_id child_id
0          1     2, 3
1          4      NaN
2          5     6, 8
3          7      NaN

如果需要把NaN显示为null,可以再加一步:

result['child_id'] = result['child_id'].fillna('null')

这个方法的优势在于充分利用pandas的矢量化操作和分组聚合,避免循环遍历,处理大数据量时效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:25:30