Skip to main content
 首页 » 编程设计

python之如何通过在列中添加和减去值来 reshape 数据框

2025年05月04日27lori

我有一个看起来像这样的数据框,

   Head CHR Start   End Transcriptid     
    a   1   11869   12227   ENST1 
    b   1   12613   12721   ENST8    
    c   1   13221   14409   ENST2    
    d   1   11872   12227   ENST5    
    f   1   12613   12721   ENST3 

我正在寻找的是稍微更改 Start 和 End 列,并从中获取一个新的数据框。比如,我想要新的数据文件,其开头为 End of first Row +10,End 为第二行开始 -10 等等所有行。数据框非常大,有 70,000 多行

所以,最后,我的目标是获得如下所示的数据框,因为最后一行没有 Start 和 End 的值。

Head CHR Start  End  Transcriptid 
a   1   12237   12603   ENST1 
b   1   12731   13211   ENST8 
c   1   14419   11862   ENST2 
d   1   12237   12603   ENST5 
f   1                   ENST3 

任何帮助将不胜感激

请您参考如下方法:

我认为您需要先通过 copy 创建新的 Series ,然后将 10 添加到 End 列。最后你需要 shift系列开始,减去10:

最后,您需要将 Start 列的最后一个值更改为 NaN - 您可以使用 iloc与 get_loc :

start = df['Start'].copy() 
df['Start'] = df.End + 10 
df['End'] = ((start.shift(-1) - 10)) 
df.iloc[-1, df.columns.get_loc('Start')] = np.nan 
#if column Start is always in 3.position 
#df.iloc[-1, 2] = np.nan  
 
print (df) 
  Head  CHR    Start      End Transcriptid 
0    a    1  12237.0  12603.0        ENST1 
1    b    1  12731.0  13211.0        ENST8 
2    c    1  14419.0  11862.0        ENST2 
3    d    1  12237.0  12603.0        ENST5 
4    f    1      NaN      NaN        ENST3 

如果您需要空的字符串:

start = df['Start'].copy() 
df['Start'] = df.End + 10 
df['End'] = ((start.shift(-1) - 10)) 
df.iloc[-1, df.columns.get_loc('Start')] = '' 
df.iloc[-1, df.columns.get_loc('End')] = '' 
print (df) 
  Head  CHR  Start    End Transcriptid 
0    a    1  12237  12603        ENST1 
1    b    1  12731  13211        ENST8 
2    c    1  14419  11862        ENST2 
3    d    1  12237  12603        ENST5 
4    f    1                      ENST3