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

Pandas中如何基于现有DataFrame按手机号唯一值批量创建DataFrame

问题场景

现有存储通话记录的DataFrame df1,数据量1万行以上,包含同一日期不同号码的通话、同一号码在不同日期的通话记录,样例数据如下:

DateNumber
01/01/20221234567891
01/01/20221234567892
01/02/20221234567891
01/02/20221234567893
01/02/20221234567892

需求为遍历df1,按Number字段的唯一手机号对行分组,为每个唯一手机号创建独立的新DataFrame。因操作需定期执行,df1的长度和内容会动态波动,排序后手动指定行范围、手动逐个提取单个号码对应数据的方式(如下方代码)无法适配动态场景:

df2= df1[df['Number'].isin([1234567891])]

需要可适配数据动态变化的自动化实现方案。

自动化实现方案

优先使用pandas原生groupby方法实现,不需要提前枚举手机号列表,自动适配数据量、号码范围的动态变化,1万行数据下性能无压力。

  • 推荐方案:用字典统一管理所有分组后的DataFrame
    该方式不会污染全局变量空间,方便后续批量处理、按号码取数,代码最简洁:
    # 分组结果存入字典:key为手机号,value为对应手机号的通话记录DataFrame
    number_df_map = {num: group for num, group in df1.groupby('Number', as_index=False)}
    
    取指定号码的DataFrame时直接按键索引即可,比如获取1234567891的通话记录,直接调用number_df_map[1234567891],和手动筛选的结果完全一致。需要批量处理所有号码的数据时,直接遍历字典即可:
    for phone_num, call_df in number_df_map.items():
        # 在此处编写单号码数据的处理逻辑,比如统计通话次数、导出csv等
        print(f"号码{phone_num}通话记录数:{len(call_df)}")
    
  • 备选方案:动态生成独立命名的全局变量
    如果必须生成df_xxx格式的独立变量,可通过globals()动态注册变量,不推荐日常使用,易出现变量覆盖、批量管理困难的问题:
    for num, group in df1.groupby('Number', as_index=False):
        globals()[f"df_{num}"] = group
    
    执行完成后会自动生成所有对应号码的DataFrame变量,比如df_1234567891、df_1234567892,无需提前手动定义。

提示:如果Number字段存在浮点类型、特殊字符等情况,生成字典key或变量名前建议先做格式清洗,避免出现键错误或非法变量名问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:39:27