如何计算从数据框中现有列转移的列,并截断每个组的第一行和最后一行?



我有一个数据框架如下:

df = 
integer_id begin 
0          13
0          15
0          18
0          19
1          10
1          15
1          17

我想计算第三列end,其中df.end由给定integer_id的下一个df.start定义,因此,例如,

上面的将变成

df = 
integer_id begin  end
0          13     15
0          15     18
0          18     19
0          19     
1          10     15
1          15     17
1          17

此外,对于每个integer_id的最后一行,我希望end转到25,对于每个integer_id的第一行,我希望start被截断到10,所以最终,我们将有

df = 
integer_id begin  end
0          10     15
0          15     18
0          18     19
0          19     20
1          10     15
1          15     17
1          17     20

我不太擅长熊猫,但我想我将不得不在这里使用applygroupby('integer_id'),或者有另一种方法我可以在这里应用?

使用groupby.shift+fillna和布尔索引duplicated:

df['end'] = (df.groupby('integer_id')['begin'].shift(-1)
.fillna(20, downcast='infer')
)
df.loc[~df['integer_id'].duplicated(), 'begin'] = 10

输出:

integer_id  begin  end
0           0     10   15
1           0     15   18
2           0     18   19
3           0     19   20
4           1     10   15
5           1     15   17
6           1     17   20

最新更新