更新和合并datafram中的列

2024-07-05 11:43:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在两个数据帧中有一列'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中。任何帮助都将不胜感激。提前谢谢


Tags: 数据iddataframeupdatepddf1df2id3
2条回答

我认为需要:

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

解释:

首先^{}两个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,所以使用keep only last值^{}删除重复项:

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^{}排序

您可以使用Pandas的merge方法做同样的事情

可以使用以下合并函数合并df1和df2:

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

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

enter image description here

第二步是删除ID列中的重复行

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

这将删除列ID中的所有重复行,但第一次出现的行除外

enter image description here

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

df =df.sort_values('ID')

enter image description here

相关问题 更多 >