gpt4 book ai didi

python - 如何根据 Pandas 另一列中的条件计算记录的频率?

转载 作者:行者123 更新时间:2023-11-28 20:34:42 25 4
gpt4 key购买 nike

我有一个这样的表:

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 和 pivot_table 但没能得到正确的答案。 Pandas 的任何建议将不胜感激?谢谢!

最佳答案

有点像

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

关于python - 如何根据 Pandas 另一列中的条件计算记录的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48123740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com