如何在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
步骤解释
- 统计配对的跨年份数:通过
groupby(['donorID', 'recipientID'])['year'].nunique(),我们先按「捐赠者-受赠者」组合分组,统计每个组合出现的不同年份数量——这一步能帮我们识别哪些配对是跨年份的。 - 筛选符合条件的配对:用
query('year_count >= 2')过滤出那些至少在2个年份都有捐赠的配对。 - 按捐赠者统计数量:再次按
donorID分组,用size()统计每个捐赠者对应的符合条件的配对数。 - 补全所有捐赠者:通过
reindex(df['donorID'].unique(), fill_value=0)确保原始数据里的所有捐赠者都出现在结果中,没有符合条件配对的捐赠者就填充0,避免遗漏。
内容的提问来源于stack exchange,提问作者alys
相关产品推荐
相关产品推荐

