2017-08-07 54 views
2

我有一個測量和測量的含有日期數據幀df內(durationkm取平均數據的同一天熊貓

df 
Out[20]: 
          Date duration km 
0 2015-03-28 09:07:00.800001 0  0 
1 2015-03-28 09:36:01.819998 1  2 
2 2015-03-30 09:36:06.839997 1  3 
3 2015-03-30 09:37:27.659997 nan 5 
4 2015-04-22 09:51:40.440003 3  7 
5 2015-04-23 10:15:25.080002 0  nan 

如何計算平均每日持續時間和公里?我想借此使用GROUPBY和日期行的平均...

回答

3

我想你需要resample

cols = df.columns.difference(['Date']) 
#if possible convert to float 
df[cols] = df[cols].astype(float) 

#if astype failed, because non numeric data, convert them to NaNs 
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce') 

#if mixed dtypes 
df[cols] = df[cols].astype(str).astype(float) 
#alternatively 
#df[cols] = df[cols].astype(str).apply(pd.to_numeric, errors='coerce') 

df = df.resample('d', on='Date').mean().dropna(how='all') 
print (df) 
      duration km 
Date      
2015-03-28  0.5 1.0 
2015-03-30  1.5 4.0 
2015-04-22  3.0 7.0 
2015-04-23  0.0 0.0 

或者:

df = df.set_index('Date').groupby(pd.Grouper(freq='d')).mean().dropna(how='all') 
print (df) 
      duration km 
Date      
2015-03-28  0.5 1.0 
2015-03-30  1.5 4.0 
2015-04-22  3.0 7.0 
2015-04-23  0.0 0.0 
+0

嗨,謝謝你的回答。 究竟是什麼最後一部分.dropna(how ='all')呢? – gabboshow

+0

存在問題重新抽樣返回連續日期時間索引的所有缺失值。如果缺少某個日期,則值將被添加並由'NaN'填充。 ['dropna'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html)刪除所有包含所有'NaN'的行。 '約翰高爾特'答案它不需要,但沒有datetimeindex,只有索引填充蟒蛇日期(也許問題,也許不是) – jezrael

+0

我編輯了我的問題,插入一些nans ...是否可以使用nanmean? – gabboshow

1

使用groupby

In [896]: df.groupby(df.Date.dt.date).mean() 
Out[896]: 
      duration km 
Date 
2015-03-28  0.5 1.0 
2015-03-30  1.5 4.0 
2015-04-22  3.0 7.0 
2015-04-23  0.0 0.0 
+0

謝謝!但是我得到DataError:沒有數字類型來聚合 – gabboshow

+0

您的'km'和'duration'列是字符串類型也許? – Zero

+0

他們都是對象... – gabboshow