2016-02-12 74 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

相关问题