第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

基于列值作為子集的匹配數(shù)據(jù)幀

基于列值作為子集的匹配數(shù)據(jù)幀

呼喚遠(yuǎn)方 2022-08-25 15:53:17
假設(shè)我有兩個(gè)熊貓數(shù)據(jù)幀:import pandas as pdsource_df = pd.DataFrame.from_dict({"Total": [315.59, 241.17, 165.87],                                              "Label": ["id|1234", "id|2345", "id|2333"]})    Total    Label0  315.59  id|12341  241.17  id|23452  165.87  id|2333和match_df = pd.DataFrame.from_dict(    {"Labels": ["id|1234; id|4957", "id|7632", "id|2345; id|9342", "id|2333; id|8321; id|9001"]})                      Labels0           id|1234; id|49571                    id|76322           id|2345; id|93423  id|2333; id|8321; id|9001我想替換使用 中的值中的值,選擇 位于 中的行。因此,所需的輸出將是:Labelsource_dfLabelsmatch_dfsource_df.Labelmatch_df.Labels    Total                      Label0  315.59           id|1234; id|49571  241.17           id|2345; id|93422  165.87  id|2333; id|8321; id|9001我目前這樣做的方法依賴(lài)于 DataFrames using 之間的成對(duì)比較,這是出了名的慢,需要避免:iterrowsfor ii, row in source_df.iterrows():                                                for _, match_row in match_df.iterrows():                                            if row.Label in match_row.Labels:                                                   source_df.at[ii, "Label"] = match_row.Labels                                    break有沒(méi)有一種更pythonic和更有效的方法來(lái)實(shí)現(xiàn)這種行為?
查看完整描述

1 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

首先使用DataFrame.explode(pandas 0.25 +)由Series.str.split創(chuàng)建的列表,因此可以使用DataFrame.mergeLabels


df1 = match_df.assign(Label = match_df['Labels'].str.split('; ')).explode('Label')


df = source_df.merge(df1, on='Label')

print (df)

    Total    Label                     Labels

0  315.59  id|1234           id|1234; id|4957

1  241.17  id|2345           id|2345; id|9342

2  165.87  id|2333  id|2333; id|8321; id|9001

最后一列 :Label


df['Label'] = df.pop('Labels')

print (df)

    Total                      Label

0  315.59           id|1234; id|4957

1  241.17           id|2345; id|9342

2  165.87  id|2333; id|8321; id|9001

另一個(gè)具有Series.map和字典理解的解決方案:


d = {y: x for x in match_df['Labels'] for y in x.split('; ')}


source_df['Label'] = source_df['Label'].map(d)

print (source_df)

    Total                      Label

0  315.59           id|1234; id|4957

1  241.17           id|2345; id|9342

2  165.87  id|2333; id|8321; id|9001


查看完整回答
反對(duì) 回復(fù) 2022-08-25
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)