微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-如何使用数据框作为映射来更改另一个数据框中的值

我有一个大型数据框,它充当整数和名称间的映射:

from StringIO import StringIO
import pandas as pd

gene_int_map = pd.read_table(StringIO("""Gene       Int
Mt-nd1   2
Cers2   4
Nampt   10
Madd    20
Zmiz1   21
Syt1        26
Syt5    30
Syt7        32
Cdca7   34
Ablim2  42
Elp5    43
Clic1   98
Ece2    100"""), sep="\s+")

然后,我有一个数据框,我要将Gene列转换为映射中给定的整数(to_convert中的名称可以覆盖):

to_convert = pd.read_table(StringIO("""Gene    Term
Mt-nd1  GO:0005739
Mt-nd1  GO:0005743
Mt-nd1  GO:0016021
Mt-nd1  GO:0030425
Mt-nd1  GO:0043025
Mt-nd1  GO:0070469
Mt-nd1  GO:0005623
Mt-nd1  GO:0005622
Mt-nd1  GO:0005737
Madd    GO:0016021
Madd    GO:0045202
Madd    GO:0005886
Zmiz1   GO:0005654
Zmiz1   GO:0043231
Cdca7   GO:0005622
Cdca7   GO:0005623
Cdca7   GO:0005737
Cdca7   GO:0005634
Cdca7   GO:0005654"""), sep="\s+")

就像我说的,我想做的就是用gene_int_map中的整数值替换to_convert中的名称.

我敢肯定这是超级简单,但是似乎没有任何合并选项可以做到.我也无法使用任何布尔型蒙版.

附言我还想用gene_int_map中的整数替换一栏数据框中的值:

simple_series = pd.read_table(StringIO("""Gene
Ablim2
Elp5
Clic1
Ece2"""), squeeze=False)

如果答案足够笼统地包括这种情况,那就太好了.

解决方法:

在gene_int_map的“ Gene”列中调用set_index,并将其作为参数传递给map,然后在另一个df的“ Gene”列中进行调用

In [119]:
to_convert['Gene'].map(gene_int_map.set_index('Gene')['Int'])

Out[119]:
0      2
1      2
2      2
3      2
4      2
5      2
6      2
7      2
8      2
9     20
10    20
11    20
12    21
13    21
14    34
15    34
16    34
17    34
18    34
Name: Gene, dtype: int64

这也适用于您的simple_series:

In [120]:
simple_series['Gene'].map(gene_int_map.set_index('Gene')['Int'])

Out[120]:
0     42
1     43
2     98
3    100
Name: Gene, dtype: int64

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐