我有一个看起来像这样的数据框,
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
我正在寻找的是更改列的开始和结束并从中获取一个新的数据框。就像我想要的新数据文件的开头为第一行的结尾+10和结束为开始第二行-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
非常感谢任何帮助
答案 0 :(得分:4)
我认为您需要先按copy
创建新的Series
,然后将10
添加到列End
。最后您需要shift
系列start
,减去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
如果您需要空strings
:
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
答案 1 :(得分:1)
只需一步(除最后一项外,我不清楚问题中是否存在拼写错误):
df[['Start', 'End']] = np.add([df['End'], df['Start'].shift(-1).ffill()],
[[10], [-10]]).T