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

Pandas按顶层函数名拆分含内部调用的以太坊交易DataFrame

按顶层调用函数拆分以太坊交易轨迹DataFrame实现方案

你的初始分组归类逻辑是成立的,以下是基于pandas原生操作的高效实现,避免手动逐组遍历的冗余开销,适配数千到数十万级别的交易数据量:


核心实现代码

import pandas as pd

# 1. 构建交易哈希到顶层函数的映射关系
# 筛选所有CALL_ID为\N的顶层交易记录
top_level_records = df[df["CALL_ID"] == r"\N"]
# 生成TX_HASH: 顶层FUNCTION_NAME的字典映射
tx_hash_to_top_func = dict(zip(
    top_level_records["TX_HASH"],
    top_level_records["FUNCTION_NAME"]
))

# 2. 为全量数据(含内部调用)匹配所属的顶层函数标记
df["_top_func"] = df["TX_HASH"].map(tx_hash_to_top_func)

# 3. 按顶层函数拆分生成独立子DataFrame
sub_dataframes = {}
for func_name, group in df.groupby("_top_func", dropna=False):
    # 移除临时添加的标记列,重置索引,和原表结构保持一致
    sub_dataframes[func_name] = group.drop(columns=["_top_func"]).reset_index(drop=True)

调用时直接通过顶层函数名取对应子表即可,比如取顶层函数为transfer的所有交易全轨迹:sub_dataframes["transfer"]


可选校验逻辑

拆分完成后可以通过两段简单校验确认结果正确性,避免数据读入异常导致的匹配错误:

  • 行数一致性校验:所有子表行数总和等于原表总行数,无遗漏/重复
  • 轨迹完整性校验:每个子表内的顶层交易记录数,等于子表内去重交易哈希数,不存在缺顶层记录的残缺轨迹
# 行数校验
assert sum(sub.shape[0] for sub in sub_dataframes.values()) == df.shape[0], "拆分后记录数不匹配,存在遗漏或重复"

# 轨迹完整性校验
for func_name, sub_df in sub_dataframes.items():
    top_record_cnt = sub_df[sub_df["CALL_ID"] == r"\N"].shape[0]
    unique_tx_cnt = sub_df["TX_HASH"].nunique()
    assert top_record_cnt == unique_tx_cnt, f"顶层函数{func_name}对应的子表存在残缺交易轨迹"

实现说明

  • 没有采用逐组遍历归并的写法,而是通过哈希映射一次性给全量记录打分类标签,再用原生groupby拆分,性能比手动循环高2~10倍,数据量越大优势越明显
  • 自动适配所有存在的顶层FUNCTION_NAME取值,不用提前枚举20余种函数名,后续新增顶层函数类型也不需要改代码
  • 保留了原表所有字段和记录顺序,每个子表内同TX_HASH的顶层记录、内部调用记录和原表排序一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:03:18