2016-04-04 24 views
1

Oldukça basit olduğunu düşündüğüm bir şeyi yapmaya çalışırken çok fazla sorun yaşıyorum ama basit bir yaklaşım bulamıyorum.Gruplara göre pandalar df tarih hesaplama

Site      category 
Date    datetime64[ns] 
Test_Reading     int64 

Site Date  Test_Reading 
A 2011-10-16 100 
A 2011-10-20 70 
A 2011-11-01 150 
A 2011-11-15 110 
B 2011-10-16 17 
B 2011-10-17 20 
B 2011-10-18 55 
B 2011-10-20 155 
B 2011-10-24 70 
C 2011-10-01 55 
C 2011-11-01 60 
C 2011-12-01 110 

Her Site için deney okumaları arasında ortalama gün sayısını hesaplamak istiyorum:

aşağıdaki yapıya sahip bir df var. Tarih veri türü ile çalışan çok fazla sorun yaşıyorum.

İdeal olarak, ben sadece gösteren yeni df oluşturmak istiyorum şu:

Site mean_lag_days 
A  x 
B  x 
C  x 

cevap

4

IIUC sonra 'Tarihe' üzerine groupby istiyoruz ve Sıralar arasında diff hesaplamak nerede lambda uygulamak ve mean almak :

In [18]: 
df.groupby('Site')['Date'].apply(lambda x: x.diff().mean()) 

Out[18]: 
Site 
A 10 days 00:00:00 
B 2 days 00:00:00 
C 30 days 12:00:00 
Name: Date, dtype: timedelta64[ns] 

nihai istenilen sonucu elde etmek için:

In [20]: 
df.groupby('Site')['Date'].apply(lambda x: x.diff().mean()).reset_index().rename(columns={'Date':'Mean_lag_days'}) 

Out[20]: 
    Site Mean_lag_days 
0 A 10 days 00:00:00 
1 B 2 days 00:00:00 
2 C 30 days 12:00:00 
+0

Tam olarak aradığım şey bu. Basit. Olumsuz sonuçlarla başa çıkmak için, sadece abs() kullanıyor musunuz? – Daina

+0

Olumsuz sonuçlarla başa çıkmak hiç mantıklı değil. önce sırala: 'df.groupby ('Site') ['Tarih']. uygulayın (sıralanmış) .apply (fark) .apply (ortalama)' –

+0

Çalışmak olabilir abs kullanmalısınız ama ne demek döner ne tür bir dönüş yapar – EdChum

İlgili konular