亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

pandas:從匹配第一個元素的元組列表中創建列

pandas:從匹配第一個元素的元組列表中創建列

PHP
搖曳的薔薇 2023-11-09 10:54:44
我有一個示例數據框,例如:          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_pos0         11              29      31         22              29      12         22              29      13         33              29      44         44              29      4初學者與熊貓,任何幫助都會很棒!謝謝
查看完整描述

4 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

您可以將元組列表轉換為字典并使用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



查看完整回答
反對 回復 2023-11-09
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

嘗試:


# 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")

輸出:

https://img1.sycdn.imooc.com/654c4a2a0001dd4602060178.jpg

查看完整回答
反對 回復 2023-11-09
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

我們可以從您的元組創建第二個數據框,然后使用 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。


查看完整回答
反對 回復 2023-11-09
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

我投票將 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')


查看完整回答
反對 回復 2023-11-09
  • 4 回答
  • 0 關注
  • 258 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號