我有如下表,它存储在 DataFrame 中。我想添加 容差级别 = [0, 1, 5, 10, 20, 30, 50, 100, 200, 300, 500, 700] 和 获取 A、B、C 列中落入容忍级别的 ID 数
例如:在下表中,A 列的 ID 计数,tolerance_level 为 10% = 2 Tolerance_level 为 0% 的 A 列的 ID 计数 = 1 列 A 的 ID 计数,其容忍级别为 100% = 1 且 700% = 1
B 列的 ID 计数,tolerance_level 为 30% = 2,依此类推...... 如果列的 % 未在容忍级别中定义,则 ID 属于最接近的容忍级别。例如,如果某列的容差为 90%,那么它将处于 >700% 的容忍度水平
身份证号码 | A | B | C |
---|---|---|---|
1 | 0% | 1% | 5% |
3 | 10% | 30% | 50% |
6 | 100% | 300% | 500% |
7 | 700% | 900% | 50% |
10 | 10% | 30% | 50% |
所以,结果会是这样的
公差_级别 | A | B | C |
---|---|---|---|
0% | 7 | 100 | 50 |
1% | 10 | 50 | 70 |
5% | 60 | 80 | 40 |
用途:
tolerance_level = [0, 1, 5, 10, 20, 30, 50, 100, 200, 300, 500, 700]
df1 = pd.DataFrame({'tolerance_level':tolerance_level})
df2 = df.melt('ID', value_name='tol')
df2['tol'] = df2['tol'].replace('%','', regex=True).astype('int64')
df3 = pd.merge_asof(df2.sort_values('tol'),
df1, left_on='tol', right_on='tolerance_level', direction='nearest')
out = pd.crosstab(df3['tolerance_level'], df3['variable']).rename_axis(columns=None)
print (out)
A B C
tolerance_level
0 1 0 0
1 0 1 0
5 0 0 1
10 2 0 0
30 0 2 0
50 0 0 3
100 1 0 0
300 0 1 0
500 0 0 1
700 1 1 0