python熊猫-使用2列作为参考进行映射

python熊猫-使用2列作为参考进行映射,python,dictionary,pandas,Python,Dictionary,Pandas,我有两个txt文件想读入python:1)一个映射文件,2)一个数据文件。我想让一个查找表或字典读取一列中两列的值,并使用类似pandas.map函数的函数确定将哪个值放入第三列。实际地图文件约700000行,实际数据文件约1000万行 玩具数据框(或者我可以重新创建为字典)-地图 玩具数据框-数据文件 Chr Position 1 1000 1 2000 2 1000 2 2001 最终生成的表格: Chr Position

我有两个txt文件想读入python:1)一个映射文件,2)一个数据文件。我想让一个查找表或字典读取一列中两列的值,并使用类似pandas.map函数的函数确定将哪个值放入第三列。实际地图文件约700000行,实际数据文件约1000万行

玩具数据框(或者我可以重新创建为字典)-地图

玩具数据框-数据文件

Chr     Position
1       1000
1       2000
2       1000
2       2001
最终生成的表格:

Chr     Position   Name
1       1000       SNPA
1       2000       SNPB
2       1000       SNPC
2       2001       NaN
我只在一个列查找中发现了几个关于此的问题:。但似乎找不到使用两列的方法。我也对其他可能处理基因组数据的软件包持开放态度


作为第二个额外问题,如果第三列具有一定数量的映射值,那么如果有方法映射第三列也很好。换句话说,上面生成的表的第4行将映射到SNPD,因为它离SNPD只有1远。但是我很乐意得到上面的解决方案。

我会这样做:

读取地图数据,使前两列成为索引:

dfm = pd.read_csv('/path/to/map.csv', delim_whitespace=True, index_col=[0,1])
delim_whitespace=True
更改为
sep=',
如果您有
作为分隔符

读取DF(设置相同的索引):

加入您的DFs:

df.join(dfm)
输出:

In [147]: df.join(dfm)
Out[147]:
              Name
Chr Position
1   1000      SNPA
    2000      SNPB
2   1000      SNPC
    2001       NaN

对于奖金问题,请尝试类似于

的方法,如果我的dfs有不同的列名,我该怎么做?我刚刚开始学习Python和pandas(我通常在R中工作)。我是要重命名该列,还是有其他方法?@GaiusAugustus,Pandas中有三个函数可用于加入:
join
merge
concat
——了解它们会帮助你有一个好的开始
df.join(dfm)
In [147]: df.join(dfm)
Out[147]:
              Name
Chr Position
1   1000      SNPA
    2000      SNPB
2   1000      SNPC
    2001       NaN