2013-02-28 138 views
5

我有一組數據,從中我要繪製的數字鍵每唯一的ID計數(X = unique_id_count,Y = key_count)的,我試圖學習如何利用pandas情節鍵數在熊貓

在這種情況下:

unique_ids 1 =鍵數2

unique_ids 2 =鍵數1

from pandas import * 
key_items = ("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c") 
id_data = ("X", "X", "X", "X", "X", "X", "X", "Y", "Y", "Y", "X", "X", "X") 

df = DataFrame({'keys': key_items, 'ids': id_data}) 

我設法拉出到裂傷數據到我想要的來自數據幀的數據並對其進行重構,並重建一個新的數據框。在這種情況下,它可能會更好做這一切在沒有熊貓蟒蛇...

unique_values = defaultdict(list) 
for items in df.itertuples(index=False): 
    key = items[1] 
    v = items[0] 
    unique_values[key].append(v) 

unique_values_count = {} 
for k, values in unique_values.iteritems(): 
    unique_values_count[k] = [len(set(values))] 

# reformat for plotting 
key_col = ("a", "b", "c") 
id_col = [unique_values_count[k][0] for k in key_col] 



df2 = DataFrame({"keys":key_col, "unique_id_count": id_col}) 
df2.groupby("unique_id_count").size().plot(kind="bar") 

是否有更好的方法來更直接地做到這一點使用初始數據幀?

回答

9
s = df.groupby("keys").ids.agg(lambda x:len(x.unique())) 
pd.value_counts(s).plot(kind="bar") 
+1

這可以簡化一下:'s'可以不使用熊貓'像這樣nunique'功能lambda表達式來計算:' s = df.groupby(「keys」)。agg(Series.nunique)' – mjul 2014-10-06 13:33:41

4

如何只直接使用value_counts()

pd.value_counts(df['ids']).plot.bar() 

enter image description here