2014-01-27 42 views
2

我有值的數據幀,看起來像這樣:選擇子集GROUPBY數據幀,其中多個鍵具有值

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 [「旅程」,「模式」]和獲得本:

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 

我想,以確定涉及公交車和RTS的旅程,所以在這種情況下,結果應該返回的旅程1和3 我可能知道如何可以做到這一點? 謝謝。

回答

0

您可以通過單獨再旅程組檢查各組是否包含不止一個階段:

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

的基本理念,雖然是,如果你想找到‘而參與的行程某某某某’,你應該組只由旅程,然後計算每個組是否符合這樣的條件。

+0

明白了,非常感謝:) – user2798444

+0

第二個可以以更pythonic的方式完成: 'd.groupby('journey')['mode']。unique()。apply(lambda u:'BUS '在你和'RTS在你') –