<p>因为性能很重要,在<code>groupby</code>之前计数<code>0</code>值,而不是每个组,所以for count可能是两列的<code>sum</code>的聚合:</p>
<pre><code>df1 = pd.concat([
(df.assign(total_zeros = df[col].eq(0).astype(int))
.groupby(col)['target','total_zeros']
.sum()
.add_suffix(f'_{col}')
.reset_index()
) for col in df.columns
], axis=1)
print(df1)
var1 target_var1 total_zeros_var1 var2 target_var2 \
0 var1_bin1 1 0 var2_bin1 1
1 var1_bin2 0 0 var2_bin2 0
2 var1_bin3 1 0 var2_bin3 2
3 var1_bin4 2 0 var2_bin4 1
4 var1_bin5 0 0 var2_bin5 0
total_zeros_var2 var3 target_var3 total_zeros_var3 target \
0 0 var3_bin2 1.0 0.0 0.0
1 0 var3_bin3 3.0 0.0 1.0
2 0 var3_bin4 0.0 0.0 NaN
3 0 var3_bin5 0.0 0.0 NaN
4 0 NaN NaN NaN NaN
target_target total_zeros_target
0 0.0 6.0
1 4.0 0.0
2 NaN NaN
3 NaN NaN
4 NaN NaN
</code></pre>