我有一个示例数据框,例如:
shippingAddress
现在有一个元组列表,如:
cid pos
0 11 29
1 22 29
2 22 29
3 33 29
4 44 29
我想从元组(第二个元素)列表中创建另一列。仅当df列[(11, 3), (22, 1), (33, 4), (44, 4), (55, 7), (66, 2)]
中的第一个元素匹配时:
赞:
cid
这里是熊猫的入门者,任何帮助都将是很大的!谢谢
答案 0 :(得分:3)
您可以将元组列表转换为字典,并在其上使用map
:
b = [(11, 3), (22, 1), (33, 4), (44, 4), (55, 7), (66, 2)]
df["b"] = df["cid"].map(dict(b))
print(df)
cid pos b
0 11 29 3
1 22 29 1
2 22 29 1
3 33 29 4
4 44 29 4
答案 1 :(得分:1)
尝试:
# Toy dataframe
df = pd.DataFrame({"cid":[11,22,22,33,44],"pos":[29,29,29,29,29]})
lista = [(11, 3), (22, 1), (33, 4), (44, 4), (55, 7), (66, 2)]
# Solution:
df.merge(pd.DataFrame(lista, columns = ["cid", "new_pos"]), on = "cid")
输出:
答案 2 :(得分:0)
我们可以从您的元组中创建第二个数据框,然后使用panda的众多合并功能之一,我们可以从元组中获取第二个元素。
在这种情况下,请使用map
。
t = [(11, 3), (22, 1), (33, 4), (44, 4), (55, 7), (66, 2)]
df['new_pos'] = df['cid'].map(pd.DataFrame(t,columns=['cid','pos']).set_index('cid')['pos'])
cid pos new_pos
0 11 29 3
1 22 29 1
2 22 29 1
3 33 29 4
4 44 29 4
分解
pd.DataFrame(t,columns=['cid','pos']).set_index('cid')['pos']
收益
cid
11 3
22 1
33 4
44 4
55 7
66 2
Name: pos, dtype: int64
在您的列上使用map
会将数据帧中cid
的实例与您的元组进行匹配,并返回所选的列值,在这种情况下为pos
答案 3 :(得分:0)
我将把Tuokes列表放入第二个数据帧,然后进行左合并:
df1 = pd.DataFrame([{'cid': 11, 'pos': 29},
{'cid': 22, 'pos': 29},
{'cid': 22, 'pos': 29},
{'cid': 33, 'pos': 29},
{'cid': 44, 'pos': 29}])
df2 = pd.DataFrame([(11, 3), (22, 1), (33, 4), (44, 4),
(55, 7), (66, 2)], columns=['cid', 'new_pos'])
df3 = pd.merge(df1, df2, how='left', on='cid')