1

我有一个df看起来像这样的数据框:

     id   Category   Time
1    176       12      00:00:00
2    4956      2       00:00:00
3    583       4       00:00:04
4    9395      2       00:00:24
5    176       12      00:03:23

这基本上是他们在特定项目中使用的一组id和项目。我使用然后我想看看他们是否使用相同的类别或不同的类别并分别分配 True 或 False (或者如果那是那个特定的第一个项目。我还过滤掉了数据以删除所有只有一个的 s 。categoryTimedf.groupby['id']NaNididTime

例如,其中一组可能看起来像

      id   Category   Time
1    176       12      00:00:00
2    176       12      00:03:23
3    176       2       00:04:34
4    176       2       00:04:54
5    176       2       00:05:23

我想执行一个操作来获取

      id   Category   Time          Transition
1    176       12      00:00:00       NaN
2    176       12      00:03:23       False
3    176       2       00:04:34       True
4    176       2       00:04:54       False
5    176       2       00:05:23       False

之后我考虑过对列apply进行某种处理,但我无法确定正确的功能。Categorygroupby

4

1 回答 1

0

你不需要 agroupby这里,你只需要sortand shift

df.sort(['id', 'Time'], inplace=True)
df['Transition'] = df.Category != df.Category.shift(1)
df.loc[df.id != df.id.shift(1), 'Transition'] = np.nan

我还没有测试过这个,但它应该可以解决问题

于 2015-01-29T20:57:01.730 回答