大熊猫:从元组upoon匹配的第一个元素列表中创建列

时间:2020-10-14 16:08:19

标签: python pandas

我有一个示例数据框,例如:

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

这里是熊猫的入门者,任何帮助都将是很大的!谢谢

4 个答案:

答案 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")

输出:

enter image description here

答案 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')