Python:如何在不删除重复数据的情况下将一个数据框中的列值替换为另一个数据框

问题描述 投票:1回答:2

我有两个数据帧:一个来自csv文件,另一个是sql db的输出

DataFrame1看起来像这样:(源自csv文件)df1

 |BId    |Timestamp    |SequenceNumber|TypeCode|LineNumber|Qty |Grade      |StartDate    |EndDate      
0|1002899|19/08/19 0:03|1355          |f       |10        |3.55|Aeiouswe   |18/08/19 4:49|20/08/19 1:00
1|1002899|19/08/19 0:04|1356          |f       |10        |8.4 |hdujeujdido|18/08/19 4:49|20/08/19 1:00
3|1002899|19/08/19 0:13|1357          |f       |10        |3.56|hdujeujdido|18/08/19 4:49|20/08/19 1:00
4|1002899|19/08/19 0:26|1358          |f       |10        |12.2|iueoe      |18/08/19 4:49|20/08/19 1:00
6|1001346|19/08/19 0:08|1844          |f       |10        |110 |derets     |18/08/19 4:49|20/08/19 1:00
7|1002867|19/08/19 1:39|1461          |f       |10        |21.8|derets     |18/08/19 4:49|20/08/19 1:00
8|1002867|19/08/19 1:39|1461          |f       |20        |500 |uijsts     |18/08/19 4:49|20/08/19 1:00

第二个数据帧从sql派生:df2

 |BId|SiteId
0|1001346|180
1|1002899|181
2|1002867|182
3|1002375|183
4|1002376|184
5|1002377|185
6|1002378|186
7|1002379|187
8|1002380|188
9|1002381|189
10|1000438|191
11|1000439|192
12|1000365|193
13|1000288|194
14|1000408|195
15|1001895|10006
16|1002870|10008
17|1002348|10009
18|1002358|10012

如果df1之间的BId与df2匹配,我想用df2中的SiteId列的值替换df1中BId的值

我的预期输出将如下所示:

 |BId    |Timestamp    |SequenceNumber|TypeCode|LineNumber|Qty |Grade      |StartDate    |EndDate      
0|181|19/08/19 0:03|1355          |f       |10            |3.55|Aeiouswe   |18/08/19 4:49|20/08/19 1:00
1|181|19/08/19 0:04|1356          |f       |10            |8.4 |hdujeujdido|18/08/19 4:49|20/08/19 1:00
3|181|19/08/19 0:13|1357          |f       |10            |3.56|hdujeujdido|18/08/19 4:49|20/08/19 1:00
4|181|19/08/19 0:26|1358          |f       |10            |12.2|iueoe      |18/08/19 4:49|20/08/19 1:00
6|180|19/08/19 0:08|1844          |f       |10            |110 |derets     |18/08/19 4:49|20/08/19 1:00
7|182|19/08/19 1:39|1461          |f       |10            |21.8|derets     |18/08/19 4:49|20/08/19 1:00
8|182|19/08/19 1:39|1461          |f       |20            |500 |uijsts     |18/08/19 4:49|20/08/19 1:00

我尝试使用以下方法:

df1['BId'] = df1['BId'].map(df2.set_index('BId')['SiteId'])

但是我收到以下错误重新索引仅对具有唯一值的索引对象有效]

考虑到我在df1中有BId的重复值,如何在不删除重复项的情况下替换这些值

我有两个数据帧:一个是从csv文件派生的,另一个是来自sql db DataFrame1的输出,看起来像这样:(从csv文件派生)df1 | BId | Timestamp | SequenceNumber | TypeCode | ...

python pandas dataframe
2个回答
0
投票

嗯,不确定是否可以。您可以尝试使用replace函数:该函数需要知道必须替换哪个Col,然后需要新值列表。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html

您可以尝试:


0
投票

我敢肯定,这样做会更简单,但是我可以通过将df1和df2转换为列表来做到这一点然后使用for循环替换值,然后将结果转换回如下所示的数据帧:

© www.soinside.com 2019 - 2024. All rights reserved.