2016-04-01 25 views
1

satır adı olarak gruplanmış satır değerlerini kullanıyorum sadece python (pandas) ile çalışmaya başladım ve şimdi ilk sorum var. ŞimdiDataframe, bir satır adı olarak

ID A Class 
1 True [0,5] 
2 False [0,5] 
3 True [5,10] 
4 False [10,20] 
5 True [0,5] 
6 False [10,20] 

i böyle bir şey yapabileceği serin çözümü, arıyorum:

Class True False 
[0,5] 2  1 
[5,10] 1  0 
[10,20] 0  2 

nasıl True çok saymak istiyor aşağıdaki satır adlarını içeren bir dataframe var ve FalseClass için hızlı bir çözüm var mı? Dataframe'im 2 milyondan fazla girişe sahip olabilir.

cevap

1

df Let olmak için dataframe, ben ilk kullanırsınız:

g = df.groupby('Class')['A'].value_counts().reset_index() 

döndüren:

 Class  A 0 
0 [0,5] True 2 
1 [0,5] False 1 
2 [10,20] False 2 
3 [5,10] True 1 

sonra döndürün ediyorum İstediğiniz şekli elde etmek için yukarıdaki tablo:

a = pd.pivot_table(g, index='Class', columns='A', values=0).fillna(0) 

Bu döndürür:

A  False True 
Class     
[0,5]  1.0 2.0 
[10,20] 2.0 0.0 
[5,10]  0.0 1.0 
+1

Eğer 'Class' tipi bir dize değil, bir liste ise, bu durum unhashable tip istisnası atar. –

+0

Bunu işaretlediğiniz için teşekkürler. Diğer cevap durumunda da var mı? –

+0

Yapıyor. Yorum yapmak üzere. –

4

Toplama yapmak için pivot_table kullanabilirsiniz. Bundan sonra, istediğiniz çıktıyla eşleştirmek için sütun adlarını ve dizini biçimlendirme meselesi.

# Perform the pivot and aggregation. 
df = pd.pivot_table(df, index='Class', columns='A', aggfunc='count', fill_value=0) 

# Format column names and index to match desired output. 
df.columns = [c[1] for c in df.columns] 
df.reset_index(inplace=True) 

elde edilen çıktı:

 Class False True 
0 [0,5]  1  2 
1 [10,20]  2  0 
2 [5,10]  0  1 

Düzenleme:

yukarıdaki çözüm 'Class' sütun elemanları şeritleri olduğunu varsayar. onlar listeleri, aşağıdaki yapabileceğini:

df['Class'] = df['Class'].map(tuple) 
**original solution code here** 
df['Class'] = df['Class'].map(list) 
+0

Ben Python 2.7 ve pandalar 0.18.0 işe gelemedi. Bununla birlikte, aggfunc = len 'ile çalışır. – ayhan

+0

Bu garip. Python 3.5 & Pandas 0.18.0 için benim için çalışıyor. – root

+0

Yalnızca indeks ile bir veri karesi döndürür - sayım yok. Doğru/Yanlış değerlerin nasıl ele alındığı ile ilgili bir sorun olabilir mi? – ayhan

İlgili konular