如何为Pandas数据框添加付款人对收款人历史交易次数列?
解决方案
针对你的需求,核心是按**付款人(Payer)+收款人(Payee)**的组合分组,统计每组内当前行之前的交易次数,用cumcount()就能高效实现,完全适配200万行的大数据量场景。
正确代码
import pandas as pd # 你的原始数据 df = pd.DataFrame([ (1000, 'Frank', 'Hugo'), (100, 'Peter', 'Frank'), (10000, 'Hugo', 'James'), (300, 'James', 'Jennifer'), (250, 'Frank', 'Hugo'), (550, 'Peter', 'Frank'), (10000, 'Frank', 'Hugo') ], columns=['Amount', 'Payer', 'Payee']) # 新增Previous_transactions列 df['Previous_transactions'] = df.groupby(['Payer', 'Payee']).cumcount() print(df)
代码说明
groupby(['Payer', 'Payee']):将数据按「付款人-收款人」的唯一组合分组,确保只统计同一对用户之间的交易。cumcount():对每个分组内的行从0开始逐行计数,这个数值恰好就是当前交易发生前,该付款人向同一收款人进行过的交易次数——比如分组内第一行是0(之前无交易),第二行是1(之前有1次),完全匹配你的输出要求。
为什么你之前的代码无效?
你用的df['Payee'].groupby(df['Payer']).value_counts()是统计每个付款人下,各收款人的总交易次数,返回的是每个(Payer, Payee)组合的汇总结果(比如Frank→Hugo的总次数是3),不是逐行的计数,所以结果长度和原DataFrame不匹配,无法直接赋值为新列。
内容的提问来源于stack exchange,提问作者MLonzo
相关产品推荐
相关产品推荐

