更新和合并 pandas 数据框中的列

updating and merging a column in pandas dataframe

我在两个数据框中有一列 'A',比如 df1 和 df2。

df1:

|  ID  | A |  |
|------|---|--|
| ID1  | 5 |  |
| ID2  | 6 |  |
| ID3  | 7 |  |
| ID4  | 8 |  |

df2:

|  ID  | A |  |
|------|---|--|
| ID1  | 5 |  |
| ID2  | 1 |  |
| ID3  | 8 |  |
| ID5  | 7 |  |
| ID6  | 8 |  |
| ID7  | 9 |  |

需要更新 df1:

|  ID  | A |  |
|------|---|--|
| ID1  | 5 |  |
| ID2  | 1 |  |
| ID3  | 8 |  |
| ID4  | 8 |  |
| ID5  | 7 |  |
| ID6  | 8 |  |
| ID7  | 9 |  |

如果 ID 在 df2 中,我想用 df2 中的值更新 df1 中的列 'A',否则我想在 df1 中保留相同的值。此外,如果df2中有新的ID,我想在df1中添加新的值。

我看过 pd.DataFrame.update 的文档,它确实将 df2 的值更新为 df1,但没有将新值添加到 df1。任何帮助将不胜感激。提前致谢。

我认为需要:

df = pd.concat([df1, df2]).drop_duplicates(subset=['ID'], keep='last').sort_values('ID')
print (df)
    ID  A
0  ID1  5
1  ID2  1
2  ID3  8
3  ID4  8
3  ID5  7
4  ID6  8
5  ID7  9

解释:

首先 concat 两个 DataFrame 一起:

print (pd.concat([df1, df2]))
    ID  A
0  ID1  5
1  ID2  6
2  ID3  7
3  ID4  8
0  ID1  5
1  ID2  1
2  ID3  8
3  ID5  7
4  ID6  8
5  ID7  9

因为创建了相同的 ID,按 drop_duplicates 删除重复项,仅保留最后一个值:

print (pd.concat([df1, df2]).drop_duplicates(subset=['ID'], keep='last'))
    ID  A
3  ID4  8
0  ID1  5
1  ID2  1
2  ID3  8
3  ID5  7
4  ID6  8
5  ID7  9

最后按 IDsort_values 排序。

你可以使用Pandas的合并方法做同样的事情。

您可以使用合并功能合并 df1 和 df2,如下所示:

df = pd.merge(df2,df1, how ='outer')

这里我将 df2 与 df1 合并。外部使用来自两个数据帧的键的并集。 Union 将获取 df2 中的所有密钥,并且仅获取 df1 中 df2 中不可用的那些密钥。

第二步是根据 ID 列删除重复行。

df = df.drop_duplicates(subset=['ID'],keep='first')

这将删除列 ID 中的所有重复行,除了第一个出现的行。

第三步是根据 ID 列对行进行排序。

df =df.sort_values('ID')