Python 熊猫取代问题

Python 熊猫取代问题,python,replace,pandas,Python,Replace,Pandas,我可以使用pandas replace使用字典替换数据帧中的值: prod_dict = {1:'Productive',2:'Moderate',3:'None'} df['val'].replace(prod_dict,inplace=True) 如果我想用一个数字替换数据帧中的一组值,该怎么办。例如,我想将所有值从1映射到20,再映射到1;所有值从21到40到2,所有值从41到100到3。如何在字典中指定并在替换中使用它?您可以使用apply遍历并在每个元素上应用函数,使用lam

我可以使用pandas replace使用字典替换数据帧中的值:

prod_dict     = {1:'Productive',2:'Moderate',3:'None'}
df['val'].replace(prod_dict,inplace=True)

如果我想用一个数字替换数据帧中的一组值,该怎么办。例如,我想将所有值从1映射到20,再映射到1;所有值从21到40到2,所有值从41到100到3。如何在字典中指定并在替换中使用它?

您可以使用
apply
遍历并在每个元素上应用函数,使用lambda编写函数,用字典中的值替换键

我将在这里简要介绍一个示例

  • 首先,我将创建一个dataframe来展示算法
  • 此函数应生成i,j之间的值列表
  • 我将创建lambda函数来映射这些值
输出:

     B  E
0    0  1
1    1  1
2    2  1
3    3  1
4    4  1
5    5  1
6    6  1
7    7  1
8    8  1
9    9  1
10  10  1
11  11  1
12  12  1
13  13  1
14  14  1
15  15  1
16  16  1
17  17  1
18  18  1
19  19  1
20  20  1
21  21  2
22  22  2
23  23  2
24  24  2
25  25  2
26  26  2
27  27  2
28  28  2
29  29  2
30  30  2
31  31  2
32  32  2
33  33  2
34  34  2
35  35  2
36  36  2
37  37  2
38  38  2
39  39  2
40  40  2
41  41  3
42  42  3
43  43  3
44  44  3
45  45  3
46  46  3
47  47  3
48  48  3
49  49  3
您可以通过以下方式替换该列:

 df['B']= df['B'].apply(lambda x: 1 if x in genValues(0,20) else 2 if x in genValues(21,40) else 3 if x in genValues(41,100) else x)

您在上面创建的词典!你想要改变的价值观。我想把每一个价值观“1”转化为“生产性”、“2”转化为“适度”。。等等,啊,那是一对一的映射。我实际上想使用一个多值单键字典。不确定你的解决方案是否适用?我认为那本字典不是一个好的解决方案。字典已创建为1对1映射。您可以通过分离案例来实现这一点。检查更新版本。
df['E']= df['B'].apply(lambda x: 1 if x in genValues(0,20) else 2 if x in genValues(21,40) else 3 if x in genValues(41,100) else x)

print df
     B  E
0    0  1
1    1  1
2    2  1
3    3  1
4    4  1
5    5  1
6    6  1
7    7  1
8    8  1
9    9  1
10  10  1
11  11  1
12  12  1
13  13  1
14  14  1
15  15  1
16  16  1
17  17  1
18  18  1
19  19  1
20  20  1
21  21  2
22  22  2
23  23  2
24  24  2
25  25  2
26  26  2
27  27  2
28  28  2
29  29  2
30  30  2
31  31  2
32  32  2
33  33  2
34  34  2
35  35  2
36  36  2
37  37  2
38  38  2
39  39  2
40  40  2
41  41  3
42  42  3
43  43  3
44  44  3
45  45  3
46  46  3
47  47  3
48  48  3
49  49  3
 df['B']= df['B'].apply(lambda x: 1 if x in genValues(0,20) else 2 if x in genValues(21,40) else 3 if x in genValues(41,100) else x)