我有两个数据帧:一个来自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 | ...
嗯,不确定是否可以。您可以尝试使用replace函数:该函数需要知道必须替换哪个Col,然后需要新值列表。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html
您可以尝试:
我敢肯定,这样做会更简单,但是我可以通过将df1和df2转换为列表来做到这一点然后使用for循环替换值,然后将结果转换回如下所示的数据帧: