2016-02-12 71 views
1

例如:熊貓:基於其他列創建新列的高效方法。許多以幾

df = pd.DataFrame({"A": [7001, 8001, 9001]}) 
equiv = {1:[7001, 8001], 2: [9001]} 
df["B"] = df["A"].map(equiv.get) 

a, b 
7001, 1 
8001, 1 
9001, 2 

我想喜歡的事結束了:

df = pd.DataFrame({"A": [7001, 8001, 9001]}) 
equiv = {1:[7001, 8001], 2: 9001} 
df["B"] = df["A"].map(equiv.get) 

我不想用equiv = {7001:1, 8001:1, 9001:2},因爲在我的實際數據集I將有許多字符串值,映射到12

+1

爲什麼值'9001'不是一個元素'list'喜歡'[9001]'? – jezrael

+0

@jezrael哦,謝謝你的錯字捕捉! – As3adTintin

+0

我可以將'9001'放入一個元素'list'中,但它不會達到我的目標。也許這看起來更乾淨,但我會更新它! – As3adTintin

回答

1

您可以使用inverted dictionary然後map它:

import pandas as pd 

df = pd.DataFrame({"A": [7001, 8001, 9001]}) 
print df 
     A 
0 7001 
1 8001 
2 9001 

equiv = {1:[7001, 8001], 2: [9001]} 

d = dict((v,k) for k in equiv for v in equiv[k]) 
print d 
{7001: 1, 9001: 2, 8001: 1} 

df["B"] = df["A"].map(d) 
print df 
     A B 
0 7001 1 
1 8001 1 
2 9001 2 
+0

謝謝,這就是我正在尋找的! – As3adTintin