擅长:python、mysql、java
<p>我们可以尝试不使用循环:</p>
<pre><code>columns_split = df.columns.str.split('_')
count = (df.set_axis(pd.MultiIndex.from_tuples(map(tuple, columns_split)), axis=1)
.stack()
.eq('Favourable')
.sum(level=0))
s = columns_split.str[0].to_series().add('_%Fav')
new_df = (df.join(count.add_suffix('_FavCount'))
.join(count.add_suffix('_%Fav').div(s.value_counts()))
)
print(new_df)
</code></pre>
<p><strong>输出</strong></p>
<pre><code> Coaching_q1 Coaching_q2 Diversity_q1 Diversity_q2 Coaching_FavCount \
0 Favourable Neutral Favourable Favourable 1.0
1 Favourable Favourable Favourable Favourble 2.0
2 NaN Favourable NaN NaN 1.0
Diversity_FavCount Coaching_%Fav Diversity_%Fav
0 2.0 0.5 1.0
1 1.0 1.0 0.5
2 0.0 0.5 0.0
</code></pre>