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

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

如何匹配數據框中列之間的值

如何匹配數據框中列之間的值

陪伴而非守候 2022-01-18 17:19:29
我想從數據框中的一列與其他列中獲取匹配項。屬性列是一個列表。下面是一個例子:  date        tableNameFrom    tableNameJoin   attributeName1 29-03-2019  film             language        [film.languageId, language.languageID, film.filmID]2 30-03-2019  inventory as i   rental as r     [i.inventoryId, r.filmId]這是我嘗試過的:df1 = (pd.DataFrame(df['attribute'].values.tolist())                      .stack()                      .str.split('.', expand=True)                      .reset_index(drop=True))df1.columns = ['tableName','attributeName']print(df1)我得到的輸出:  tableName    attributeName1 film         languageId2 language     languageID3 film         filmId這里需要的輸出:  date        tableName    attributeName1 29-03-2019  film         languageId2 29-03-2019  language     languageID3 29-03-2019  film         filmId4 30-03-2019  inventory    inventoryId5 30-03-2019  rental       filmId知道我該怎么做嗎?謝謝您的幫助。
查看完整描述

1 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

首先Series.str.split通過asfor 字典創建字典:


df3 = df[['tableNameFrom','tableNameJoin']].stack().str.split(' as ',  expand=True).dropna()

d = dict(zip(df3[1], df3[0]))

print (d)

{'i': 'inventory', 'r': 'rental'}

將 index 參數添加到DataFrame構造函數并刪除 last reset_index:


df1 = (pd.DataFrame(df['attributeName'].values.tolist(), index=df.index)

                      .stack()

                      .str.split('.', expand=True))

df1.columns = ['tableName','attributeName']

print(df1)

    tableName attributeName

1 0      film    languageId

  1  language    languageID

  2      film        filmID

2 0         i   inventoryId

  1         r        filmId

僅選擇列date和DataFrame.join新的DataFrame:


df2 = df[['date']].join(df1.reset_index(level=1, drop=True))

最后Series.replace是字典:


df2['tableName'] = df2['tableName'].replace(d)

df2 = df2.reset_index(drop=True)

print (df2)

         date  tableName attributeName

0  29-03-2019       film    languageId

1  29-03-2019   language    languageID

2  29-03-2019       film        filmID

3  30-03-2019  inventory   inventoryId

4  30-03-2019     rental        filmId


查看完整回答
反對 回復 2022-01-18
  • 1 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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