<p>使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.mask.html" rel="nofollow noreferrer">^{<cd1>}</a>:</p>
<pre><code>df['start'].mask(df['strand']=='-',df['start']+1,inplace=True)
df['end'].mask(df['strand']=='-',df['end']-2,inplace=True)
</code></pre>
<hr/>
<pre><code>print(df)
seqnames start end name number strand
0 A 51 451 A 1 -
1 B 31 320 A 2 -
2 C 11 430 A 3 -
3 D 36 344 A 4 +
4 E 40 321 A 5 +
5 F 79 232 A 6 -
</code></pre>
<hr/>
<p>也可以使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html" rel="nofollow noreferrer">^{<cd2>}</a>+<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.where.html" rel="nofollow noreferrer">^{<cd3>}</a>:</p>
<pre><code>df[['start','end']]=( df[['start','end']]
.apply(lambda x: pd.Series((x['start']+1,x['end']-2)).rename({0:'start',1:'end'}),axis=1)
.where(df['strand']=='-',df[['start','end']])
)
print(df)
seqnames start end name number strand
0 A 51 451 A 1 -
1 B 31 320 A 2 -
2 C 11 430 A 3 -
3 D 36 344 A 4 +
4 E 40 321 A 5 +
5 F 79 232 A 6 -
</code></pre>