0

python pandas を使用して (ただし、他のソリューションにも対応しています) 、入力ファイルの最後の日付を保持しながら、DataFrame をアップサンプリングしたいと思います。のデフォルトの動作方法は、月の最終日DataFrame.resampleを計算することです。これが私の例です:

>>> import pandas as pd
>>> import numpy as np
>>> begin = pd.datetime(2013,1,1)
>>> end = pd.datetime(2013,2,20)
>>> dtrange = pd.date_range(begin, end, freq='5D')
>>> values = np.random.rand(len(dtrange))*10
>>> df = pd.DataFrame({'values': values}, index=dtrange)
>>> df
              values
2013-01-01  7.763089
2013-01-06  6.032173
2013-01-11  9.747979
2013-01-16  0.856741
2013-01-21  7.111047
2013-01-26  2.654279
2013-01-31  5.222770
2013-02-05  9.578846
2013-02-10  5.088311
2013-02-15  4.193273
2013-02-20  3.345553
>>> df.resample('M', how='last')
              values
2013-01-31  5.222770
2013-02-28  3.345553

私が期待する出力は次のとおりです。

              values
2013-01-31  5.222770
2013-02-20  3.345553

2013-02-20 という日付に注意してください。これは私の入力データからの実際の日付であり、 によって作成された日付ではありませんresample

4

1 に答える 1

4

おそらく最も派手な方法ではありませんが、いつでもgroupby時間頻度を指定して、必要なものを返すカスタム関数を適用できます。

DataFrame から最後の値を返す関数:

my_resample = lambda x: x.sort_index().tail(1)

次に、月の頻度でグループ化し、関数を適用します。

df.groupby(pd.TimeGrouper(freq='M'), group_keys=False).apply(my_resample)

結果は次のとおりです。

              values
2013-01-31  5.167121
2013-02-20  4.829109
于 2013-12-16T15:13:47.850 に答える