![](/img/trans.png)
[英]How to copy one DataFrame column in to another Dataframe if their indexes values are the same
[英]How to Replace Blank Indexes in One Dataframe with Indexes From Another Dataframe
我有兩個數據框, df1
和df2
。
df1
是抓取的數據:
Name ID Symbol
0 AAA 23135106
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 DDD 2079K305
4 2079K107
而df2
是參考數據:
Name ID Symbol
0 Aaa 23135106 String1
1 Bbb G06242104 String2
2 Ccc 98980L101 String3
3 Ddd 2079K305 String4
4 Eee 2079K107 String5
5 Fff 287Y109 String6
6 Ggg 380105 String7
7 Hhh G00349103 String8
通過使用ID
作為密鑰,我想:
df2
Symbols
和Names
填充df1
的空Symbols
和Names
,以及df2
Names
替換df1
中的df2
(例如,AAA vs Aaa) Names
,以便最終結果如下所示:
Name ID Symbol
0 Aaa 23135106 String1
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 Ddd 2079K305 String4
4 Eee 2079K107 String5
fillna
和map
是您所需要的:
df1['Symbol'] = df1.Symbol.fillna(df1.ID.map(df2.set_index('ID').Symbol))
輸出:
Name ID Symbol
0 AAA 23135106 String1
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 DDD 2079K305 String4
4 EEE 2079K107 String5
我認為你只需要DataFrame.merge
+ DataFrame.fillna
:
df1[['Name','ID']].merge(df2[['ID','Symbol']],on='ID',how = 'left').fillna(df1)
Name ID Symbol
0 AAA 23135106 String1
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 DDD 2079K305 String4
4 EEE 2079K107 String5
或者
( df1[['ID']].merge(df2[['Name','ID','Symbol']],on='ID',how = 'left')
.fillna(df1)
.reindex(columns = df1.columns) )
Name ID Symbol
0 Aaa 23135106 String1
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 Ddd 2079K305 String4
4 Eee 2079K107 String5
如果您需要同時更新Name
和Symbol
,則需要update
和切片分配
df1_1 = df1.set_index('ID')
df1_1.update(df2.set_index('ID'))
df1.loc[df1.Symbol == '', ['Name', 'Symbol']] = df1_1.reset_index()
Out[1238]:
Name ID Symbol
0 Aaa 23135106 String1
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 Ddd 2079K305 String4
4 Eee 2079K107 String5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.