91487


ほぼ初心者のため、ご教授のほどよろしくお願いいたします。

とあるファイル（`length.txt`、約40万行×2列、画像左参照）を１行ずつ参照してデータ取得し、そのデータをもとに別のファイル（`effect.txt`、約4万行×2列、画像右参照）のデータを検索、照合し、データをテキストファイルに書き出すということを行いたいです。

具体的には、以下の流れです。

  1. `length.txt`内の`locus`列、`length`列の値を１行ずつ取得。この例では、１行目は`locus`が1で、`length`が191です。
  2. `effect.txt`内の`snp`列で、１．で取得した`locus`の値を検索し、照合した`locus`値の行の`effect`列の値を、１．で取得した`length`個分（どの要素も大体200個前後です）そこから下の`effect`列の値を取得する。この例では、-0.03460835、0、-0.03001576、・・・、0、0、0、0.2164842、・・・（全部で191個分）。
  3. 取得した`effect`列の値を、行方向に書き出す。
  4. この作業を`length`列の終わりまで行い、テキストファイル（タブ区切り）として書き出す。すなわち約40万行×約200列のデータです。（空白要素は`#N/A`や`-`で表現したいです）

初心者ながら以下のようなコードを書いてみましたがうまくいきません。

[code]

    import pandas as pd
    
    length = pd.read_table('length.txt', delim_whitespace=True)
    effect = pd.read_table('effect.txt', delim_whitespace=True)
    
    with open('effect_out.txt', "w") as ew:
    　　for i, j in zip(length['locus'], length['length']):
    　　　　effect[effect['snp'] == i]
    　　　　effect.head(j).T
    　　　　for ext in effect:
    　　　　　　ew.write(ext+'\n')
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/UAVUl.png)](https://i.stack.imgur.com/UAVUl.png)


CC BY-SA 4.0
2022-10-07T05:17:28.760
91478
2022-10-07T11:31:41.710
2022-10-07T06:01:13.507
43025
54671
question
python pandas bioinformatics
python pandas データの参照、検索、取得およびファイル書き出し


`length.txt` と `effect.txt` は適当に作成(TAB区切り)。

[code]

    import pandas as pd
    
    length = pd.read_table('length.txt', delim_whitespace=True)
    effect = pd.read_table('effect.txt', delim_whitespace=True)
    
    effect = effect.set_index('snp')
    dfx = length.apply(lambda i: effect.loc[i['locus']:i.sum()-1, 'effect'].reset_index(drop=True), axis=1)
    dfx.to_csv('effect_out.txt', sep='\t', na_rep='#N/A', index=False, header=None)
    
[/code]

**length.txt**

[code]

    locus   length
    1   10
    2   10
    3   10
    4   10
    
[/code]

**effect.txt**

[code]

    snp effect
    1   1
    2   3
    3   -5
    4   0
    5   14
    6   -1
    7   8
    8   6
    9   -2
    10  0
    
[/code]

**effect_out.txt**

[code]

    1.0 3.0 -5.0    0.0 14.0    -1.0    8.0 6.0 -2.0    0.0
    3.0 -5.0    0.0 14.0    -1.0    8.0 6.0 -2.0    0.0 #N/A
    -5.0    0.0 14.0    -1.0    8.0 6.0 -2.0    0.0 #N/A    #N/A
    0.0 14.0    -1.0    8.0 6.0 -2.0    0.0 #N/A    #N/A    #N/A
    
[/code]


CC BY-SA 4.0
2022-10-07T11:31:41.710
91487
2022-10-07T11:31:41.710
47127
91478
answer