[英]How to Replace Blank Indexes in One Dataframe with Indexes From Another Dataframe
I have two dataframes, df1
and df2
.我有两个数据框, df1
和df2
。
df1
is scraped data: df1
是抓取的数据:
Name ID Symbol
0 AAA 23135106
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 DDD 2079K305
4 2079K107
And df2
is reference data:而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
By using ID
as the key, I want to:通过使用ID
作为密钥,我想:
Symbols
and Names
in df1
with those in df2
, and用df2
Symbols
和Names
填充df1
的空Symbols
和Names
,以及Names
in df1
with those in df2
,用df2
Names
替换df1
中的df2
(例如,AAA vs Aaa) Names
,so that the end result looks like:以便最终结果如下所示:
Name ID Symbol
0 Aaa 23135106 String1
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 Ddd 2079K305 String4
4 Eee 2079K107 String5
fillna
and map
is what you need: fillna
和map
是您所需要的:
df1['Symbol'] = df1.Symbol.fillna(df1.ID.map(df2.set_index('ID').Symbol))
Output:输出:
Name ID Symbol
0 AAA 23135106 String1
1 Bbb G06242104 String2
2 Ccc 30303M102 String3
3 DDD 2079K305 String4
4 EEE 2079K107 String5
I think you only need DataFrame.merge
+ DataFrame.fillna
:我认为你只需要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
or或者
( 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
If you need update both Name
and Symbol
, you need update
and slicing assignment如果您需要同时更新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.