0
因此,当密钥位于与[值相对应的范围内时,我想用字典中的字符串替换Dataframe列中的值容忍度,价值+容忍度]。熊猫:当密钥与公差匹配时,通过字典值更改数据帧列中的值
例如用dictionnary这样:
dict = {101.2:"A", 110:"A", 150:"B", 170:"C", 600:"A"}
我想替换在列“AA”的值,如果在一个范围内,该值或多或少的公差相匹配字典中的一个键相应的字符串值。
如下面我想在“AA”列以匹配字典中的关键101.2,如果我的公差值设置为0.5的值101的示例从而改变了值101为“A”的匹配列的行“ AA”。
下面的例子:从剪贴板
end start diff aa
0 200 99 101 101
1 250 99 151 151
2 270 99 170.2 170.2
3 300 99 201 201
4 450 99 351 351
5 600 99 501 501
6 800 99 701 701
7 250 200 50 50
8 270 200 70 70
9 300 200 100 100
10 450 200 250 250
11 600 200 400 400
12 800 200 600 600
13 270 250 20 20
14 300 250 50 50
15 450 250 200 200
16 600 250 350 350
17 800 250 550 550
18 300 270 30 30
19 450 270 180 180
20 600 270 330 330
21 800 270 530 530
22 450 300 150 150
23 600 300 300 300
24 800 300 500 500
25 600 450 150 150
26 800 450 350 350
27 800 600 200 200
负载数据帧
table = pd.read_clipboard().iloc[1:]
tol_value = 0.5
预期的结果:
end start diff aa
0 200 99 101 A
1 250 99 151 151
2 270 99 170.2 C
3 300 99 201 201
4 450 99 351 351
5 600 99 501 501
6 800 99 701 701
7 250 200 50 50
8 270 200 70 70
9 300 200 100 100
10 450 200 250 250
11 600 200 400 400
12 800 200 600 600
13 270 250 20 20
14 300 250 50 50
15 450 250 200 200
16 600 250 350 350
17 800 250 550 550
18 300 270 30 30
19 450 270 180 180
20 600 270 330 330
21 800 270 530 530
22 450 300 150 B
23 600 300 300 300
24 800 300 500 500
25 600 450 150 B
26 800 450 350 350
27 800 600 200 200
我知道如何用一个确切的匹配替换:
table2 = table.replace({"aa": dict})
但我不知道如何使宽容一致。
我曾尝试:
for index, row in table.iterrows():
for key, value in dict.iteritems():
if (row['aa']-tol_value <= key) & (key <= row['aa']+tol_value):
table.replace(row.aa, value)
它的工作原理,但不幸的是这将创建一个多dataframes因为有反复。
任何帮助,将不胜感激
非常优雅的做法,非常感谢! –