Python-根据另一个数据帧匹配替换数据帧中的值

标签 python pandas numpy replace

假设我有 2 个名为 A 和 B 的 Python 数据框,如下所示。 如何根据 B 中列 ID 和月份的匹配替换数据框 A 中的列值? 有什么想法吗?

谢谢

数据框A:

ID  Month   City    Brand   Value
1   1   London  Unilever    100
1   2   London  Unilever    120
1   3   London  Unilever    150
1   4   London  Unilever    140
2   1   NY  JP Morgan   90
2   2   NY  JP Morgan   105
2   3   NY  JP Morgan   100
2   4   NY  JP Morgan   140
3   1   Paris   Loreal  60
3   2   Paris   Loreal  75
3   3   Paris   Loreal  65
3   4   Paris   Loreal  80
4   1   Tokyo   Sony    100
4   2   Tokyo   Sony    90
4   3   Tokyo   Sony    85
4   4   Tokyo   Sony    80

数据框B:

ID  Month   Value
2   1   100
3   3   80

最佳答案

使用merge使用左连接并用原始值替换缺失值 fillna :

df = df1.merge(df2, on=['ID', 'Month'], how='left', suffixes=('_',''))
df['Value'] = df['Value'].fillna(df['Value_']).astype(int)
df = df.drop('Value_', axis=1)
print (df)
    ID  Month    City      Brand  Value
0    1      1  London   Unilever    100
1    1      2  London   Unilever    120
2    1      3  London   Unilever    150
3    1      4  London   Unilever    140
4    2      1      NY  JP Morgan    100
5    2      2      NY  JP Morgan    105
6    2      3      NY  JP Morgan    100
7    2      4      NY  JP Morgan    140
8    3      1   Paris     Loreal     60
9    3      2   Paris     Loreal     75
10   3      3   Paris     Loreal     80
11   3      4   Paris     Loreal     80
12   4      1   Tokyo       Sony    100
13   4      2   Tokyo       Sony     90
14   4      3   Tokyo       Sony     85
15   4      4   Tokyo       Sony     80

关于Python-根据另一个数据帧匹配替换数据帧中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52872582/

相关文章:

python - 无需 reshape 的索引 Numpy 张量

python - 加入合并多个数据框

python - 对 pandas 系列 `any` 、 `max` 、 `sum` 与 python 内置函数的性能好奇心

python - 'strsep' 导致 Linux 内核卡住

python - Microsoft Azure IoT Python SDK 可以成功配置但无法使用相同的凭据进行连接

python - 获取 Pandas DataFrame 中每行的非零值计数

python - numpy数组eval表示公式

python - 如何在 python 中 reshape 这个图像数组?

python - 使用 Python 查找 {{ }} 中 JavaScript 填充的信息

python - 有没有一种方法可以在opencv中使用视频捕获/读取,而又不需要花费这么长时间?