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