2013-06-19 2 views
3

Я пытаюсь перепрограммировать ежедневные данные на недельные данные с помощью панд.pandas resampling dataframe и поддерживать индекс datetime как столбец

Я использую следующие:

weekly_start_date =pd.Timestamp('01/05/2011') 
weekly_end_date =pd.Timestamp('05/28/2013') 

daily_data = daily_data[(daily_data["date"] >= weekly_start_date) & (daily_data["date"] <= weekly_end_date)]  

daily_data = daily_data.set_index('date',drop=False) 
weekly_data = daily_data.resample('7D',how=np.sum,closed='left',label='left') 

Проблема заключается в том weekly_data не имеет столбец даты больше.

Что я пропустил?

Спасибо,

+0

Что бы вы хотели, чтобы столбец даты был здесь? Он был повторно сэмплирован (еженедельно) через сумму, я не думаю, что имеет смысл иметь дату больше. На что вы надеялись? –

+0

@ Энди Я надеюсь получить 1-ю дату в неделю, так как неделя, начинающаяся, например, – ybb

ответ

1

Вы можете ресэмплировать только числовыми столбцами:

In [11]: df = pd.DataFrame([[pd.Timestamp('1/1/2012'), 1, 'a', [1]], [pd.Timestamp('1/2/2012'), 2, 'b', [2]]], columns=['date', 'no', 'letter', 'li']) 

In [12]: df1 = df.set_index('date', drop=False) 

In [13]: df1 
Out[13]: 
          date no letter li 
date 
2012-01-01 2012-01-01 00:00:00 1  a [1] 
2012-01-02 2012-01-02 00:00:00 2  b [2] 

In [15]: df1.resample('M', how=np.sum) 
Out[15]: 
      no 
date 
2012-01-31 3 

Мы можем видеть, что он использует DTYPE, чтобы определить, является ли это числовая:

In [16]: df1.no = df1.no.astype(object) 

In [17]: df1.resample('M', how=sum) 
Out[17]: 
      date no letter li 
date 
2012-01-31  0 0  0 0 

ужасный хак для фактическое суммирование:

In [21]: rng = pd.date_range(weekly_start_date, weekly_end_date, freq='M') 

In [22]: g = df1.groupby(rng.asof) 

In [23]: g.apply(lambda t: t.apply(lambda x: x.sum(1))).unstack() 
Out[23]: 
          date no letter  li 
2011-12-31 2650838400000000000 3  ab [1, 2] 

дата является суммой эпохи наносекунд ...

(Надеюсь, что я делаю что-то глупое, и есть более легкий путь!)

+0

, вы могли бы сказать медианную о датах в повторном интервалах, если вы действительно хотели – Jeff

+0

@Jeff Я думал, как писал первый line это было немного ложь: s –

+0

Спасибо Энди. Все значения в моей кадре данных являются числовыми. Повторная выборка работает в моем коде. Но мне нужна дата в качестве столбца в моем повторном дискрете df. Я не получаю это, когда я пересчитываю с помощью «7D». Столбец даты опущен – ybb

4

Если я правильно понял ваш вопрос, это выглядит вы правильно выполняете повторную выборку (Pandas docs на повторной выборке здесь: http://pandas.pydata.org/pandas-docs/stable/timeseries.html).

weekly_data = daily_data.resample('7D',how=np.sum,closed='left',label='left') 

Если единственная проблема в том, что вы хотели бы, чтобы DateTimeIndex реплицируется в колонке вы можете просто сделать это.

weekly_data['date'] = weekly_data.index.values 

Извините, если я неправильно понял вопрос. :)

Смежные вопросы