程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

有没有办法用从 Pandas 中的其他数据框中查找的值替换数据框某一列中的值?[重复]

发布于2024-11-26 22:19     阅读(565)     评论(0)     点赞(17)     收藏(5)


我有两个数据框 df1 和 df2(df1 的行数明显更多)。第一个数据框由五列组成:第 1 列 - 包含邮政编码,第 2 列至第 5 列 - 包含特定代码。第二个数据框由两列组成:第 1 列 - 原始代码,第 2 列 - 新代码。想法是从第一个数据框的第 2 列中获取代码,New Code根据列中的匹配在第二个数据框中搜索相应的代码Code,然后用第二个数据框中的新代码替换第一个数据框的第 2 列中的值:

Postcode    Column 2   Column 3   Column 4   Column 5
BS105JJ         1         3          0         1
BS105JL         0         0          0         1
BS105JN         1         2          0         1
BS105JP         0         0          0         1
BS105JR         1         1          0         1
BS105JS         0         0          0         1
BS105JT         1         5          0         1


Code       Code New
  0            1
  1            3
  2            5
  3            7
  4            9
  5            3

Expected result:

Postcode    Column 2   Column 3   Column 4   Column 5
BS105JJ         3         3          0          1
BS105JL         1         0          0          1
BS105JN         3         2          0          1
BS105JP         1         0          0          1
BS105JR         3         1          0          1
BS105JS         1         0          0          1
BS105JT         3         5          0          1

我尝试过浏览解决方案,但到目前为止只找到了查找相等数据框的方法。在理想情况下,我希望找到具有可重复使用函数的解决方案(每列都需要使用不同的数据框执行此查找),但即使只显示方法 - 也没关系,我会自己弄清楚如何将其放入函数中。


解决方案


我认为您正在寻找地图

import pandas as pd

code = pd.DataFrame({'Code': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5}, 'Code New': {0: 1, 1: 3, 2: 5, 3: 7, 4: 9, 5: 3}})
df = pd.DataFrame({'Postcode': {0: 'BS105JJ', 1: 'BS105JL', 2: 'BS105JN', 3: 'BS105JP', 4: 'BS105JR', 5: 'BS105JS', 6: 'BS105JT'}, 'Column 2': {0: 1, 1: 0, 2: 1, 3: 0, 4: 1, 5: 0, 6: 1}, 'Column 3': {0: 3, 1: 0, 2: 2, 3: 0, 4: 1, 5: 0, 6: 5}, 'Column 4': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0}, 'Column 5': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}})
df['Column 2'] = df['Column 2'].map(code.set_index('Code')['Code New'])
print(df)

# output
#   Postcode  Column 2  Column 3  Column 4  Column 5
# 0  BS105JJ         3         3         0         1
# 1  BS105JL         1         0         0         1
# 2  BS105JN         3         2         0         1
# 3  BS105JP         1         0         0         1
# 4  BS105JR         3         1         0         1
# 5  BS105JS         1         0         0         1
# 6  BS105JT         3         5         0         1


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2046119/ee7780abe165cd3eb525/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)