2013-07-03 23 views
32

Ben bir dizin olan bir DataFrame formatında şehirlerin city_id denir sahip [city],[state] (örneğin sütunlarda tamsayı sayımlarını içeren. Sorun aynı şehir için birden çok satır var ve istememizdir new york,ny onların sütun değerleri ekleyerek city_id paylaşımı satırları daraltmak ben groupby() baktım ama bu soruna nasıl uygulayacağınızı aşikar olmasabirleştiren satırlar

Düzenleme

:..

bir örnek: Ben değiştirmek istiyorum Bu:

city_id val1 val2 val3 
houston,tx 1 2 0 
houston,tx 0 0 1 
houston,tx 2 1 1 
Bu içine

:

city_id val1 val2 val3 
houston,tx 3 3 2 

varsa ~ 10-20k satır.

+6

Bu gerçekten bir kopya değil ve @ DSM'nin cevabı 'df.groupby (df.index)' yinelenen soruda görünmüyor. – LondonRob

cevap

41

I

>>> df.groupby(df.index).sum() 
       val1 val2 val3 
city_id      
houston,tx  3  3  2 
somewhere,ew  4  3  7 

veya

>>> df.reset_index().groupby("city_id").sum() 
       val1 val2 val3 
city_id      
houston,tx  3  3  2 
somewhere,ew  4  3  7 

Birinci yaklaşım groupby ve (bu durumda, city_id değerleri) endeks değerleri geçerse yapabilir

>>> df 
       val1 val2 val3 
city_id      
houston,tx  1  2  0 
houston,tx  0  0  1 
houston,tx  2  1  1 
somewhere,ew  4  3  7 

başlanarak bunları grup anahtarları olarak kullanmasını söyler ve ikincisi dizini sıfırlar ve sonra seçer city_id sütun. Daha fazla örnek için dokümanların this section numaralı sayfasına bakın. de DataFrameGroupBy nesnelerde diğer yöntemlerle bir sürü unutmayın: Aynı çizgide

>>> df.groupby(df.index) 
<pandas.core.groupby.DataFrameGroupBy object at 0x1045a1790> 
>>> df.groupby(df.index).max() 
       val1 val2 val3 
city_id      
houston,tx  2  2  1 
somewhere,ew  4  3  7 
>>> df.groupby(df.index).mean() 
       val1 val2  val3 
city_id       
houston,tx  1  1 0.666667 
somewhere,ew  4  3 7.000000 
+0

Grubunda maksimum ortalamaya sahip olan satırı seçmek için zaten var mı? Bu örnekte, ilk gruptan 'houston, tx 2 1 1' seçilmelidir. –

2

şey. Üzgünüm tam kopya değil.

mydata = [{'subid' : 'B14-111', 'age': 75, 'fdg':1.78}, 
      {'subid' : 'B14-112', 'age': 22, 'fdg':1.56},{'subid' : 'B14-112', 'age': 40, 'fdg':2.00},] 
df = pandas.DataFrame(mydata) 

gg = df.groupby("subid",sort=True).sum()