我有一个看起来像这样的数据框,
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
