python 百分比级别的 ID 计数

问题描述 投票:0回答:1

我有如下表,它存储在 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
python pandas percentage spark-notebook
1个回答
0
投票

用途:

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
© www.soinside.com 2019 - 2024. All rights reserved.