<p>您需要将日期和姓名按月份频率分组,并计算有多少次尝试是“是”。添加一点临时助手信息作为唯一月份:</p>
<pre><code>df['year_x_month'] = df['date'].apply(lambda x: x.year * x.month)
res = df[df["Attempt"].eq("Yes")]
.groupby(['year_x_month', 'Name'])['Attempt']
.count()
</code></pre>
<p><code>res</code>看起来像这样(多索引为('year\u x\u month','Name'):</p>
<pre><code>year_x_month Name
2015 Adam 2
6045 David 1
Hardik 1
Name: Attempt, dtype: int64
</code></pre>
<p>现在,使用年/月和人名的唯一组合图,分配每人和每月的尝试次数:</p>
<pre><code>my_map = dict(zip(res.index, res.values))
df['Counts'] = pd.Series(zip(df['year_x_month'], df['Name'])).map(my_map))
del df['year_x_month']
</code></pre>
<p>输出:</p>
<pre><code> date Name Attempt Counts
0 2015-01-02 Adam Yes 2.0
1 2015-01-29 Adam Yes 2.0
2 2015-02-02 David No NaN
3 2015-03-02 David Yes 1.0
4 2015-03-02 Hardik Yes 1.0
5 2015-03-02 David No 1.0
</code></pre>
<p><strong>注意:删除了以前有缺陷的实施</strong></p>
<p>在看到@ThePyGuy给出的漂亮答案后。我对检查他和我的建议的性能很感兴趣(我希望没有一个比另一个更“正确”),并发现他的建议需要4.53毫秒,我的建议需要3.97毫秒。请注意,这些统计数据是针对这个小数据集的。性能可能会随着数据帧的大小而奇怪地扩展</p>