首页 > 解决方案 > 更新/合并具有不同列名的 2 个数据文件

问题描述

我正在使用 pandas 的数据框,我有 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  |      |    |      |
+--------------------------------+

但难点在于列名不同,key ID -> EID 和值Name -> emaN, Desc -> cseD,列Cat(初始填值)和No(空值) 必须在输出表中保持不变。在第二张表中也可以有空的 EID,所以这个条目应该保持原样。

怎么可能进行这样的更新或合并?

谢谢。

标签: pythonpandas

解决方案


尝试使用 r ight_onleft_on参数的pd.merge ,以防您必须合并的列名称不同。

我正在应用检查 final_df['emaN'] 是否为空,然后从代码中复制值。

然后删除不需要的 df1 列

如果您愿意,我已将结果保存在新的 df 中final_df,您可以将数据保存在“df2”中

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)

推荐阅读