2

我正在尝试迭代或创建一个循环遍历 pandas 数据框中的列的函数。该函数应该获取每列中的值并在更大的文件中搜索这些值。然后我希望它提取这些目标值的等级并获得一个向量,其中包含从所有 100 列中获得的值的等级和。

100 列文件名为 Simulation.txt,如下所示:

SIM0    SIM1    SIM2    ...SIM100
rs168   rs668   rs228   ...rs930
rs466   rs751   rs109   ...rs216
rs484   rs139   rs636   ...rs755
rs104   rs226   rs1540  ...rs671
rs123   rs377   rs732   ...rs672

我需要搜索的较大文件是 rs_ranks.txt,它看起来像这样:

rsid    Rank
rs168   1
rs464   2
rs485   3
rs110   4
rs129   5
rs297   6
rs139   7
.       .
.       .
.       .
.       .
.       .
rs105   2498509

我想从simulation.txt中提取SIM0,然后我想从rs_ranks.txt中的SIM0中获取rs数字的排名。在我得到 SIM0 列中 rs 数字的排名后,我想计算排名和。

示例:如果我要从 rs_ranks 中提取 SIM0 的等级,我会得到这样的结果:

    SIM0    Rank
    rs168   1
    rs466   49
    rs484   398208
    rs104   402487
    rs123   2972

SIM0 的秩和为=803717 rank_sum_vector(803717,SIM1_ranksum,SIM2_ranksum,SIM100_ranksum)

最后,我希望能够对所有 100 列模拟文本执行此操作,因此最后我有一个包含 100 个秩和值的秩和向量,对应于所有 100 列。

请帮忙!我不知道如何创建一个将遍历每一列并执行此操作的函数。我一直在考虑使用合并功能,但我不知道该怎么做。谢谢!

4

1 回答 1

0

您可以applymap使用Seriesget方法

In [11]: res = df.applymap(rs.get)

In [12]: res
Out[12]:
   SIM0  SIM1  SIM2
0   388   386   491
1   148   471   171
2   162   261   276
3   910   780   445
4   952   673   367

然后sum

In [13]: df.sum()
Out[13]:
SIM0    2560
SIM1    2571
SIM2    1750
dtype: int64

(我使用了一系列随机rs整数,而不是你给出的部分)

要获取 DataFrame 和 Series,您可以使用read_csv如下方式:

In [31]: df = pd.read_csv('simulation.txt')

In [32]: rs = pd.read_csv('rs_ranks.txt').set_index('rsid')['Rank']

In [33]: rs
Out[33]:
rsid
rs168    1
rs464    2
rs485    3
rs110    4
rs129    5
rs297    6
rs139    7
Name: Rank, dtype: int64
于 2013-07-02T20:39:38.057 回答