我正在使用来自熊猫的数据框,我有2个表: 第一个:
+----------------------------+
| ID | Code | Name | Desc |
------------------------------
| 00002 | AAAA | Aaaa | A111 |
------------------------------
| 12345 | BBBB | Bbbb | B222 |
------------------------------
| 01024 | EEEE | Eeee | E333 |
------------------------------
| 00010 | CCCC | Cccc | C444 |
------------------------------
| 00123 | ZZZZ | Zzzz | Z555 |
------------------------------
| ..... | .... | .... | .... |
+----------------------------+
第二张表:
+--------------------------------+
| EID | Cat | emaN | No | cseD |
----------------------------------
| 00010 | 1 | | | |
----------------------------------
| 12345 | 1 | | | |
----------------------------------
| | 1 | | | |
+--------------------------------+
我想用第一个表中的值更新第二个表,以便得出结果:
+--------------------------------+
| EID | Cat | emaN | No | cseD |
----------------------------------
| 00010 | 1 | Сссс | | С444 |
----------------------------------
| 12345 | 1 | Bbbb | | B222 |
----------------------------------
| | 1 | | | |
+--------------------------------+
但是困难在于列名不同,键ID-> EID和值Name-> emaN,Desc-> cseD,以及Cat列(这些值最初是填充的)和No (空值)必须在输出表中保持不变。同样在第二张表中可以有空的EID,因此该条目应保持原样。
如何进行这样的更新或合并?
谢谢。
答案 0 :(得分:1)
使用r ight_on 和 left_on 参数尝试pd.merge,以防列名不同而必须合并。
我正在检查final_df ['emaN']是否为null,然后从Code复制值。
然后删除不需要的df1列
如果您希望将数据保存在'df2'中,则将结果保存到新的df final_df
import numpy as np
import pandas as pd
final_df = pd.merge(df2,df1,left_on='EID' ,right_on='ID',how='left')
final_df['emaN'] = np.where(final_df['emaN'].isnull(),final_df['Code'],final_df['emaN'])
final_df['cseD'] = np.where(final_df['cseD'].isnull(),final_df['Desc'],final_df['cseD'])
final_df.drop(['ID','Code','Name','Desc'],axis=1,inplace=True)
答案 1 :(得分:1)
据我了解的问题...
pd.merge(FirstDataFrame, SecondDataFrame, left_on='ID', right_on='EID', how='left')['EID','Cat','emaN','No','cseD']
或者如果您想加入多个领域
pd.merge(FirstDataFrame, SecondDataFrame, left_on=['ID', 'Name', 'Desc'],
right_on=['EID', 'emaN','cseD'], how='left')
['EID','Cat','emaN','No','cseD']
编辑:(见注释,过滤所需的列)