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

如何在Pandas中统计跨年度捐赠者-受赠者配对频次?

Pandas解决方案:统计跨年份的捐赠者-受赠者配对数

没问题,我来帮你搞定这个统计需求!你的目标是找出每个捐赠者有多少个「捐赠者-受赠者」配对在至少2个不同年份都有捐赠,下面是具体的Pandas实现:

完整代码

import pandas as pd

# 构造你的原始数据
df = pd.DataFrame({
    'donorID':[101,101,101,102,103,101,101,102,103],
    'recipientID':[11,11,21,21,31,11,21,31,31],
    'amount':[100,200,500,200,200,300,200,200,100],
    'year':[2014,2014,2014,2014,2014,2015,2015,2015,2015]
})

# 链式调用实现需求
result = (df.groupby(['donorID', 'recipientID'])['year']
          .nunique()  # 统计每个配对的不同年份数量
          .reset_index(name='year_count')
          .query('year_count >= 2')  # 筛选出跨至少2年的配对
          .groupby('donorID')
          .size()  # 按捐赠者统计符合条件的配对数
          .reindex(df['donorID'].unique(), fill_value=0)  # 补全所有捐赠者,无符合条件的填0
          .reset_index(name='num_donation_2_years'))

print(result)

输出结果

donorID  num_donation_2_years
0      101                      2
1      102                      0
2      103                      1

步骤解释

  1. 统计配对的跨年份数:通过groupby(['donorID', 'recipientID'])['year'].nunique(),我们先按「捐赠者-受赠者」组合分组,统计每个组合出现的不同年份数量——这一步能帮我们识别哪些配对是跨年份的。
  2. 筛选符合条件的配对:用query('year_count >= 2')过滤出那些至少在2个年份都有捐赠的配对。
  3. 按捐赠者统计数量:再次按donorID分组,用size()统计每个捐赠者对应的符合条件的配对数。
  4. 补全所有捐赠者:通过reindex(df['donorID'].unique(), fill_value=0)确保原始数据里的所有捐赠者都出现在结果中,没有符合条件配对的捐赠者就填充0,避免遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:28:21