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

使用Pandas加速特征工程:付款人-收款国历史交易统计优化

Pandas高效统计付款人历史同收款国付款次数方案

核心思路是用**分组(groupby)+ 累计计数(cumcount)**的向量式操作替代循环,这是Pandas处理这类时序分组统计的最优方案,能彻底解决大数据量下的性能问题。

具体步骤:

  1. 统一日期格式为datetime类型
    统计“此前”次数依赖时间顺序,必须先将date of payment列转为Pandas可识别的datetime格式:

    df['date of payment'] = pd.to_datetime(df['date of payment'], format='%Y年%m月%d日')
    

    (如果你的日期格式不同,调整format参数匹配即可,比如'%Y-%m-%d')

  2. 分组排序后累计计数
    先按payer(付款人)和recipient_country(收款国)分组,组内按付款日期排序,再用cumcount()获取每组内的累计序号——因为cumcount()从0开始计数,正好对应当前行之前的交易次数:

    # 按分组键和日期排序,确保计数逻辑正确
    df_sorted = df.sort_values(by=['payer', 'recipient_country', 'date of payment'])
    # 新增历史付款次数列
    df_sorted['previous_payment_count'] = df_sorted.groupby(['payer', 'recipient_country']).cumcount()
    
  3. (可选)恢复原数据顺序
    如果需要保留原始DataFrame的行顺序,用原始索引重新排序即可:

    df = df_sorted.sort_index()
    

示例验证

假设原始数据如下:

payerrecipient_countrydate of payment
BobUK2023年1月1日
BobUK2023年2月1日
AliceUS2023年1月5日
BobUS2023年3月1日
BobUK2023年4月1日

处理后previous_payment_count列的值依次为:0、1、0、0、2,完全符合“当前交易之前的付款次数”要求。

性能说明

groupby和cumcount都是Pandas底层基于C实现的向量操作,避免了Python循环的性能开销,即使处理百万级数据也能在几秒内完成,效率远超逐行loc查询的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:53