Python 2.7 Pandas:基于其他列创建新列的有效方法。多对少

Python 2.7 Pandas:基于其他列创建新列的有效方法。多对少,python-2.7,dictionary,pandas,apply,Python 2.7,Dictionary,Pandas,Apply,例如: 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 = 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}
,因为在我的实际数据集中,我将有许多字符串值映射到
1
2

您可以使用
倒排字典
,然后它:


为什么值
9001
不是像
[9001]
一样在一个元素
列表中?@jezrael噢,谢谢你的打字错误!我可以将
9001
放在一个元素
列表中,但它无法实现我的目标。也许那样看起来更干净。。。我会更新的!谢谢您如何看待将列表字典更改为倒排字典,然后使用映射<代码>d=dict((v,k)表示等价物中的k表示等价物中的v[k])
df[“B”]=df[“A”]。map(d)
我不完全理解。。。我得用谷歌搜索/想想。。。但从我粗略的理解来看,这可能有用!谢谢,那正是我想要的!
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