2017-06-06 121 views
-2

我有一個DataFrame,有3列(A,B,C)和大量的行。在每個列中都有不同類型的元素:A1,A2 ... B1,B2 ...和C1,C2 ...。在熊貓中使用groupby屬性

我想查找特定組合(例如(A1,B2,C2))在一行中出現的次數。然後,我想要生成頻率計數超過固定閾值的所有組合的(摘要)列表。例如:組合計數(A1,B2,C2)5(A2,B2,C2)7 ....如果固定值爲6.

我是熊貓和numpy的新手。這可以使用熊貓高效地完成,如果是的話,怎麼樣?

+1

您需要添加示例代碼和數據。另外,爲了清楚起見,只需調用列A,B,C及其值A1,A2,...,B1,B2,...,C1,C2 ...。 – smci

+1

歡迎來到StackOverflow。請花時間閱讀這篇文章[如何提供一個偉大的熊貓示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)以及如何提供[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)並相應地修改您的問題。 [如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)上的這些技巧也可能有用。 – jezrael

+0

是的,它可以在熊貓中完成。當你說*「我想找到一個特定的組合(a_i,b_j,c_k)在一行中出現的次數。」*,你想要你的輸出是一個表,或什麼?向我們展示示例輸出。然後,寫一個更好的標題,因爲*「使用熊貓迭代數據框」*不會告訴我們什麼。 – smci

回答

0
df = pd.DataFrame({'A':['A1','A1','A2','A3'], 
        'B':[4,4,6,4], 
        'C':[7,7,9,7]}) 

print (df) 
    A B C 
0 4 7 C1 
1 4 7 C1 
2 6 9 C2 
3 4 7 C3 

對於所有的組合使用數groupby + size

s = df.groupby(["A", "B","C"]).size() 
print (s) 
A B C 
A1 4 7  2 
A2 6 9  1 
A3 4 7  1 
dtype: int64 

對於篩選列表增值boolean indexing

L = s.index[s > 1].tolist() 
print (L) 
[('A1', 4, 7)] 
+0

謝謝。這正是我想要的。 –

+0

如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/a/5235/295067)它。謝謝。 – jezrael

+0

如何獲取大小值?即當我知道組合說(A1,4,7)時我怎麼能找到尺寸。 –

0

只使用熊貓,一個辦法可能是使用數據幀.groupby():

counts = dict() 

for group in df.groupby(['It', 'Cc', 'Ct']): 
    print(group) 
    counts[group[0]] = len(group[1]) 

一個更快的方法可能是你的數據幀轉換成一個列表,並從集合使用計數器:

from collections import Counter 

listed_df = [tuple(line) for line in list(df.values)] 
counts = Counter(listed_df)