python pandas - 使用2列作为参考的地图

时间:2016-05-01 20:36:42

标签: python dictionary pandas

我有两个txt文件我想读入python:1)一个地图文件,2)一个数据文件。我想让一个查找表或字典从TWO COLUMNS中读取一个值,并使用pandas.map函数确定要放入第3列的值。实际的地图文件大约是700,000行,真正的数据文件是大约1000万行。

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

Chr     Position   Name
1       1000       SNPA
1       2000       SNPB
2       1000       SNPC
2       2000       SNPD

玩具数据框 - 数据文件

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

我发现了几个有关此问题的问题,只有一个列查找:Adding a new pandas column with mapped value from a dictionary。但似乎无法找到使用2列的方法。我也对其他可以处理基因组数据的包持开放态度。

作为奖励第二个问题,如果有一种方法可以映射第三列,如果它具有一定数量的映射值,那也是很好的。换句话说,上面得到的表的第4行将映射到SNPD,因为它只有1。但是我很乐意为上面提供解决方案。

1 个答案:

答案 0 :(得分:3)

我会这样做:

读取您的地图数据,以便前两列成为索引:

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

sep=','更改为,

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

df = pd.read_csv('/path/to/data.csv', delim_whitespace=True, index_col=[0,1])

加入您的DF:

df.join(dfm)

输出:

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

PS为奖金问题尝试this