4

パンダを使用して、毎日のデータを毎週のデータにリサンプリングしようとしています。

私は以下を使用しています:

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 に日付列がなくなったことです。

私は何を取りこぼしたか?

ありがとう、

4

2 に答える 2

4

私があなたの質問を理解していれば、あなたがリサンプリングを正しく行っているように見えます (リサンプリングに関するパンダのドキュメント: 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

質問を誤解した場合はお詫び申し上げます。:)

于 2013-12-18T01:02:41.850 に答える
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]

日付はエポックナノ秒の合計です...

(うまくいけば、私は何かばかげたことをしています。もっと簡単な方法があります!)

于 2013-06-19T09:30:27.877 に答える