pandas 如何计算从 Dataframe 中的现有列移位的列,并截断每个组的第一行和最后一行?

c0vxltue  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个 Dataframe 如下:

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

我不太擅长Pandas,但我想我必须在这里使用applygroupby('integer_id'),或者有没有其他方法可以在这里应用?

guicsvcw

guicsvcw1#

使用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

相关问题