猿问

pandas:从匹配第一个元素的元组列表中创建列

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


          cid             pos 

0         11              29      

1         22              29      

2         22              29      

3         33              29   

4         44              29  

现在是一个元组列表,例如:


[(11, 3), (22, 1), (33, 4), (44, 4), (55, 7), (66, 2)]

我想从元组列表(第二个元素)创建另一列。仅当 df 列中的第一个元素匹配时cid:


喜欢:


          cid             pos     new_pos

0         11              29      3

1         22              29      1

2         22              29      1

3         33              29      4

4         44              29      4

初学者与熊猫,任何帮助都会很棒!谢谢


摇曳的蔷薇
浏览 195回答 4
4回答

慕尼黑的夜晚无繁华

您可以将元组列表转换为字典并使用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  b0   11   29  31   22   29  12   22   29  13   33   29  44   44   29  4

慕虎7371278

尝试:# Toy dataframedf = 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")输出:

哔哔one

我们可以从您的元组创建第二个数据框,然后使用 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_pos0   11   29        31   22   29        12   22   29        13   33   29        44   44   29        4分解一下:pd.DataFrame(t,columns=['cid','pos']).set_index('cid')['pos']产量:cid11    322    133    444    455    766    2Name: pos, dtype: int64map在列上使用将cid数据帧中的实例与元组匹配,并返回所选的列值,在本例中为pos。

智慧大石

我投票将 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')
随时随地看视频慕课网APP
我要回答