2016-04-29 50 views
2

我有一組行,我想通過標識符的值進行分組 - 每行存在 - 然後進一步隔離處理將會是這個結果的組。如何將前提條件應用於GroupBy或如何忽略GroupBy中具有一條記錄的組

我的數據框看起來是這樣的:

In [50]: df 
Out[50]: 
    groupkey b c d e    date 
0  C1 b1 c1 d1 e1 2014-10-26 12:13:14 
1  C2 NaN c2 d2 e2 2014-11-02 12:13:14 
2  C1 b3 c3 d3 e3 2014-11-09 12:13:14 
3  C1 b4 NaN d4 e4 2014-11-16 12:13:14 
4  C3 b5 c5 d5 e5 2014-11-23 12:13:14 
5  C2 b6 c6 d6 e6 2014-11-30 12:13:14 

如果我是到組由groupkey我知道我應該在GroupBy只是工作由歸國:

>> df.groupby('groupkey') 

然而,分組之前和減少我的數據集的大小的平行目的,我想不考慮任何只有一組記錄(如果按上述方式分組)的行。

在我的例子中,這意味着應該排除4行。現在

,但在我看來,最簡單的方法來計算每組的記錄,當然會意味着第一分組,然後計算的記錄,這樣的:

>> df.groupby('groupkey').count() 

我想我可以做到這一點,然後刪除只有一條記錄的組。

  1. 我不知道如何解決這個問題,而不必手動返回並刪除只有一個記錄的組。

  2. 我想知道是否有一種方法可以通過某些功能進行分組,這可以讓我在分組時使用這種情況?

感謝您的幫助

回答

1

你想filter使用的組lengroupby對象:

In [9]: 
df.groupby('groupkey').filter(lambda x: len(x) > 1) 

Out[9]: 
    groupkey b c d e    date 
0  C1 b1 c1 d1 e1 2014-10-26 12:13:14 
1  C2 NaN c2 d2 e2 2014-11-02 12:13:14 
2  C1 b3 c3 d3 e3 2014-11-09 12:13:14 
3  C1 b4 NaN d4 e4 2014-11-16 12:13:14 
5  C2 b6 c6 d6 e6 2014-11-30 12:13:14 
+0

感謝您的幫助,非常直截了當,完全符合我的要求。 – Thanos

2

我覺得你可以先通過value_countsmapboolean indexing過濾DataFrame

print df.groupkey.value_counts() != 1 
C1  True 
C2  True 
C3 False 
Name: groupkey, dtype: bool 

print df.groupkey.map(df.groupkey.value_counts() != 1) 
0  True 
1  True 
2  True 
3  True 
4 False 
5  True 
Name: groupkey, dtype: bool 

print df[df.groupkey.map(df.groupkey.value_counts() != 1)] 
    groupkey b c d e     date 
0  C1 b1 c1 d1 e1 2014-10-26 12:13:14 
1  C2 NaN c2 d2 e2 2014-11-02 12:13:14 
2  C1 b3 c3 d3 e3 2014-11-09 12:13:14 
3  C1 b4 NaN d4 e4 2014-11-16 12:13:14 
5  C2 b6 c6 d6 e6 2014-11-30 12:13:14 

有趣,它是更快filter溶液(len(df)=6k):

df = pd.concat([df]*1000).reset_index(drop=True) 

In [21]: %timeit df[df.groupkey.map(df.groupkey.value_counts() != 1)] 
1000 loops, best of 3: 1.87 ms per loop 

In [22]: %timeit df.groupby('groupkey').filter(lambda x: len(x) != 1) 
100 loops, best of 3: 2.71 ms per loop 
+0

我喜歡這個。我正在寫我自己的答案,但這更復雜。你爲什麼使用'df.groupkey'而不是'df ['groupkey']'? – Mathias711

+0

它是一樣的,也許很好看。 – jezrael

+0

感謝您的幫助,漂亮的方法和額外的表現。 – Thanos

相關問題