2014-10-30 132 views
0

我可以用熊貓代替使用字典的數據幀替換值:熊貓更換問題

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

我該怎麼辦,如果我想用一個數字來代替一組值的數據幀。例如,我想將所有從1到20的值映射到1;從21到40到2的所有值和從41到100到3的所有值。我如何在字典中指定它並在熊貓替換中使用它?

回答

1

您可以使用apply來遍歷並在每個元素上應用函數,而lambda編寫一個函數來將鍵替換爲字典中的值。

我會在這裏通過一個簡單的例子。

  • 首先,我將創建一個數據幀,以展示算法
df = pd.DataFrame(range(50), columns=list('B')) 
  • 這個功能應該產生我之間的值的列表,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) 
+0

的感謝! prod_dict會是什麼樣子? – user308827 2014-10-30 05:59:01

+0

上面創建的字典!你想要改變的價值。例如:我想要將每個值「1」轉換爲「有生產力」,「2」轉換爲「中等」等。 – 2014-10-30 06:01:20

+0

啊,這是一個1對1的映射。我實際上想要使用多個值來創建單個關鍵字典。不確定您的解決方案是否適用於此? – user308827 2014-10-30 06:06:07