首页 > 解决方案 > Qcut/Cut 和 Groupby 证据权重

问题描述

我对一个 DataFrame 进行了分组,并对分组的 Dataset 进行了统计(计算的证据权重)。

  binned_x = pd.qcut(data[col], bins, duplicates='drop')
  d0 = pd.DataFrame({'x': binned_x, 'y': data[target]})
  
 #sum = the number of 1's, count-sum= number of 0's
 d = d0.groupby("x", as_index=False).agg({"y": ["count", "sum"]})
 d.columns = ['Cutoff', 'N', 'Events']
 #np.maximum to handle variables with 0 Events
 d['% of Events'] = np.maximum(d['Events'], 0.5) / d['Events'].sum()
 d['Non-Events'] = d['N'] - d['Events']
 d['% of Non-Events'] = np.maximum(d['Non-Events'], 0.5) / d['Non-Events'].sum()
 d['WoE'] = np.log(d['% of Events']/d['% of Non-Events'])

我接下来要做的是将间隔添加到原始数据帧(为每个值分配一个间隔),这很容易data[col+"_bins"] = pd.cut(data[col], temp['Cutoffs'],right = True, precision = 2) ,但我想添加另一列,其中包含我计算的证据权重和“计数器”,例如,如果该值在第一个区间内,则在新列“bin_number”中添加一个 0。

有没有办法用相应的计算值“取消分组”数据?这将使它非常简单。

标签: pythonpandasnumpystatisticsgrouping

解决方案


推荐阅读