簡體   English   中英

如何用來自另一個數據幀的索引替換一個數據幀中的空白索引

[英]How to Replace Blank Indexes in One Dataframe with Indexes From Another Dataframe

我有兩個數據框, df1df2

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作為密鑰,我想:

  1. df2 SymbolsNames填充df1的空SymbolsNames ,以及
  2. 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

fillnamap是您所需要的:

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

如果您需要同時更新NameSymbol ,則需要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM