python - 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。
有没有办法用相应的计算值“取消分组”数据?这将使它非常简单。
解决方案
推荐阅读
- javascript - 反应原生 FlatList ListHeaderComponent 刷新
- php - 如何使用 Ajax 将在 Jquery 中创建的 html 文件 JSON 数据带入?
- javascript - 检查子值是否存在 - Firebase / React
- intersection - ArangoDB INTERSECTION() 重复
- sql - 修复 SQL Server 数据库的每个表中拼写错误的列名
- python - 如何使用 alpha != 0 从三色图中删除边缘线?
- c++ - GMOCK Uninteresting Function call for any test that is not the first test on a shared pointer mock object
- shake-build-system - 摇晃是否具有与 make 的干运行选项等效的功能?
- ios - 具有单选和多选的uitableview
- botframework - 启用语音/语音输入 BotFramework V4 模拟器