如何修正Pandas代码,实现ID列值整体递减1且保留首行?
问题:将DataFrame的ID列值递减1并保留首行数据
原尝试代码:
df['ID'] = df.index df.loc[df['ID'].astype(int)] -= 1
原DataFrame:
ID Process ID Name Time 0 0 NaN NaN msecond 1 1 32434.0 X1 1.4 2 2 32434.0 X2 1.3
预期转换结果:
ID Process ID Name Time 0 -1 NaN NaN msecond 1 0 32434.0 X1 1.4 2 1 32434.0 X2 1.3
原代码问题分析
原代码中df.loc[df['ID'].astype(int)] -= 1是用ID列的值作为行索引选取整行,再对整行所有列执行减1操作,这会误修改Process、Time等其他列,且逻辑上不是仅针对ID列做递减,因此达不到预期效果。
修正方案
只需直接对ID列执行减1操作,无需复杂的loc定位:
方案1:若ID列已存在
df['ID'] = df['ID'] - 1
方案2:若从index生成ID列后直接修改
df['ID'] = df.index - 1 # 一步生成递减后的ID列
执行后即可得到预期结果,且不会修改其他列数据,首行的Process、Name、Time值均会保留。
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

