用另一数据框的列替换数据框的列中的某些条目

时间:2019-12-14 21:14:36

标签: pandas dataframe

我有一个有关用户产品评分的数据框,如下所示, df1 =

       USER_ID  PRODUCT_ID  RATING
0        0           0       0
1        1           1       1
2        2           2       2
3        3           3       3
4        4           4       4
5        5           5       5
6        6           6       6
7        7           7       7
8        8           8       8
9        9           9       9

另一个数据框是某些用户和某些产品的真实评分,如下所示: df2 =

       USER_ID  PRODUCT_ID  RATING
0        0           0       10
1        1           1       10
2        2           2       10
3        3           3       10

我想使用df2中的真实评分替换df1中的相应评分。所以我想要获得的是

       USER_ID  PRODUCT_ID  RATING
0        0           0      10
1        1           1      10
2        2           2      10
3        3           3      10
4        4           4       4
5        5           5       5
6        6           6       6
7        7           7       7
8        8           8       8
9        9           9       9

有什么行动可以实现这一目标吗?

2 个答案:

答案 0 :(得分:3)

rng = [i for i in range(0,10)]
df1 = pd.DataFrame({"USER_ID": rng, 
                    "PRODUCT_ID": rng, 
                    "RATING": rng})


rng_2 = [i for i in range(0,4)]
df2 = pd.DataFrame({'USER_ID' : rng_2,'PRODUCT_ID' : rng_2,
                   'RATING' : [10,10,10,10]})

尝试使用update

df1 = df1.set_index(['USER_ID', 'PRODUCT_ID'])
df2 = df2.set_index(['USER_ID', 'PRODUCT_ID'])
df1.update(df2)
df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
print(df2)
       USER_ID  PRODUCT_ID  RATING
0        0           0    10.0
1        1           1    10.0
2        2           2    10.0
3        3           3    10.0
4        4           4     4.0
5        5           5     5.0
6        6           6     6.0
7        7           7     7.0
8        8           8     8.0
9        9           9     9.0

答案 1 :(得分:0)

您可以先使用合并:

df2.astype(object).combine_first(df1)                                                                                                                                               

  USER_ID PRODUCT_ID RATING
0       0          0     10
1       1          1     10
2       2          2     10
3       3          3     10
4       4          4      4
5       5          5      5
6       6          6      6
7       7          7      7
8       8          8      8
9       9          9      9