我有两个数据帧
df1 =
<表类>
名称
代码
tbody><<tr>1234567 H74 表类>
试试这些-
使用pd.DataFrame.where~df2['name'].isin(df1['name'])
检查df2中存在但df1中不存在的名称pd.where
保持当前code
值不变,如果上面为真,否则为假,它拾取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- 您可以将name列设置为df1和df2的索引,并在df2上连接(左)。
- 接下来,您可以使用
ffill(axis=1)
将df2代码值填充到nan(其中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
使用pd.concat
和drop_duplicates
:
>>> pd.concat([df1, df2]).drop_duplicates('name')
name Code
0 1234567 H74
1 1234321 J12
这可以通过设置'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