熊猫取代了问题

时间:2014-10-30 05:21:26

标签: python replace pandas

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

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

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

1 个答案:

答案 0 :(得分:1)

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

我将在这里通过一个简单的例子。

  • 首先,我将创建一个数据框来展示算法
df = pd.DataFrame(range(50), columns=list('B'))
  • 此函数应生成i,j之间的值列表。
def genValues(i,j):
  return [x for x in range(j+1) if x >=i]
  • 我将创建lambda函数来映射值。
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)