我有一个专栏' 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 | |
我想更新专栏' A'在df1中,如果ID在df2中,则来自df2的值,否则我想在df1中保持相同的值。此外,如果df2中有新ID,我想在df1中添加新值。
我已经看过pd.DataFrame.update的文档,它确实将df2中的值更新为df1,但它没有将新值添加到df1。任何帮助将不胜感激。提前致谢。
答案 0 :(得分:1)
我认为需要:
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
最后按ID
按sort_values
排序。
答案 1 :(得分:0)
您可以使用Pandas的merge方法来做同样的事情。
您可以使用合并功能合并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')