我有兩個資料框
df1=
| 姓名 | 代碼 |
|---|---|
| 1234567 | H74 |
df2=
| 姓名 | 代碼 |
|---|---|
| 1234567 | J11 |
| 1234321 | J12 |
如果 df2 中的“name”與 df1 中的“name”匹配,我想將 df2 的“Code”更改為 df1 的“Code”中的值。
我曾嘗試創建 df1 的字典;
dict = df1.set_index('name').to_dict()['Code']
df2.replace(dict)
但是,這會導致將“名稱”更改為“代碼”,例如:
| 姓名 | 代碼 |
|---|---|
| H74 | J11 |
| 1234321 | J12 |
任何幫助實作以下目標將不勝感激:
| 姓名 | 代碼 |
|---|---|
| 1234567 | H74 |
| 1234321 | J12 |
提前致謝!
uj5u.com熱心網友回復:
使用pd.concat和drop_duplicates:
>>> pd.concat([df1, df2]).drop_duplicates('name')
name Code
0 1234567 H74
1 1234321 J12
uj5u.com熱心網友回復:
試試這些——
使用 pd.DataFrame.where
~df2['name'].isin(df1['name'])檢查 df2 中存在但 df1 中不存在的名稱- 在
pd.where保持當前code值,如果上面是true,否則為假,它拿起df1['Code'] - 現在可用于替換 df1['Code'] 列。
閱讀檔案。
idx = ~df2['name'].isin(df1['name'])
df2['Code'] = df2['Code'].where(idx,df1['Code'],axis=0)
name Code
0 1234567 H74
1 1234321 J12
使用 pd.DataFrame.join
- 您可以將名稱列設定為 df1 和 df2 的索引,并在 df2 上加入(左)。
- 接下來,您可以使用
ffill(axis=1)將 df2 代碼值填充到 nans(其中 df1 不存在) - 最后,您可以只獲取
Code列,這實際上是 df1 的代碼列,其中填充了 df2 代碼值,其中它是 nan。 - 重置索引以取回您需要的內容。
- 記得把它保存在一個變數中!
閱讀檔案。
df2.set_index('name').join(df1.set_index('name'), lsuffix='_')\
.ffill(1)['Code']\
.reset_index()
name Code
0 1234567 H74
1 1234321 J12
使用 pd.DataFrame.update
這很簡單,但是是就地操作。所以要小心!
閱讀檔案。
df2.update(df1)
df2
name Code
0 1234567.0 H74
1 1234321.0 J12
uj5u.com熱心網友回復:
這可以通過將 'name' 列設定為索引并使用該update函式來完成。
import pandas as pd
df1 = pd.DataFrame({'Name':'Ashutosh', 'Code':'AP', 'Number':'1234567', 'ID':'H74'}, index=[1]).set_index('Name')
df2 = pd.DataFrame({'Name':'Ashutosh', 'Code':'JN', 'Number':'1234567', 'ID':'J11', 'Alternate':'1234321', 'SID':'J12'}, index=[1]).set_index('Name')
所以我的資料框看起來像這樣:
>>> df1
Code Number ID
Name
Ashutosh AP 1234567 H74
>>> df2
Code Number ID Alternate SID
Name
Ashutosh JN 1234567 J11 1234321 J12
使用update功能:
>>> df2['Code'].update(df1['Code'])
>>> df2
Code Number ID Alternate SID
Name
Ashutosh AP 1234567 J11 1234321 J12
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312995.html
