我有一个看起来像这样的值数据框:
mode journey stage
0 BUS 1 1
1 RTS 1 2
2 BUS 2 1
3 RTS 3 1
4 BUS 3 2
5 BUS 4 1
我做了一个 groupby ['journey','mode'] 并获得了这个:
g=df.groupby(['journey','mode'])
g.size()
journey mode
1 BUS 1
RTS 1
2 BUS 1
3 RTS 1
BUS 1
4 BUS 1
我想确定同时涉及 BUS 和 RTS 的旅程,因此在这种情况下,结果应该返回旅程 1 和 3。 我可以知道如何做到这一点吗? 谢谢。
最佳答案
可以单独按旅程分组,然后检查每个组是否包含多个阶段:
>>> df.groupby('journey')['mode'].apply(lambda g: len(g)>1)
journey
1 True
2 False
3 True
4 False
dtype: bool
如果您的数据包含其他模式并且您特别需要检查涉及“BUS”和“RTS”的模式,您可以进行更明确的检查:
>>> d.groupby('journey')['mode'].apply(lambda g: 'BUS' in g.values and 'RTS' in g.values)
journey
1 True
2 False
3 True
4 False
dtype: bool
不过,基本思想是,如果你想找到“涉及某某的旅程”,你应该只按旅程分组,然后为每个组计算它是否符合某某条件.
关于python - 选择 pandas groupby 数据框的子集,其中多个键具有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21375206/