如何根据熊猫另一栏中的条件计算记录的频率?

艾利斯

我有一个这样的表:

In [2]: 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]
   ...: })

In [3]: df
Out[3]:
   amount  donorID  recipientID  year
0     100      101           11  2014
1     200      101           11  2014
2     500      101           21  2014
3     200      102           21  2014
4     200      103           31  2014
5     300      101           11  2015
6     200      101           21  2015
7     200      102           31  2015
8     100      103           31  2015

我想按捐献者数计算捐献者与受赠者的对数(同一捐献者在n年内对同一个捐献者的捐献,其中n可以是任何数字,并且不必是连续的,但是我使用2在这里保持简单)。在这种情况下,捐赠者101在2014年和2015年分别捐赠给收件人11和21,101的计数为2。102的计数为0,103的计数为1。结果表如下所示:

   donorID  num_donation_2_years
0      101                     2
1      102                     0
2      103                     1

我尝试使用groupby和ivot_table,但没有获得正确的答案。任何关于熊猫的建议将不胜感激?谢谢!

BEN_YO

就像是

df1=df.groupby('donorID').apply(lambda x : x.groupby(x.recipientID).year.nunique().gt(1).sum())
df1
Out[102]: 
donorID
101    2
102    0
103    1
dtype: int64

获取数据框

df1.to_frame('num_donation_2_years').reset_index()
Out[104]: 
   donorID  num_donation_2_years
0      101                     2
1      102                     0
2      103                     1

至于黑暗提到不要使用 apply

这是更新

df1=df.groupby(['donorID','recipientID']).year.nunique().gt(1).sum(level=0)
df1
Out[109]: 
donorID
101    2.0
102    0.0
103    1.0
Name: year, dtype: float64

df1.to_frame('num_donation_2_years').reset_index()
Out[104]: 
   donorID  num_donation_2_years
0      101                     2
1      102                     0
2      103                     1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章