2

私は現在、pandas 0.8.0b1 のリサンプリング機能を使用するために戦っています。

たとえば、(「平均」を使用して) 10 分の値を月の値に集計しようとすると、関数は次の月の平均で 1 か月のデータの最終日を使用するようです...

以下は、3 か月の 10 分のデータの単純な時系列の例です。

  • 2012 年 1 月 : すべての値 = 1
  • 2012 年 2 月 : すべての値 = 2
  • 2012 年 3 月 : すべての値 = 3

df.resample('M',how='mean') を使用して取得した月次平均は次のとおりです。

Out[454]: 

0
2012-01-31  1.000000
2012-02-29  1.965757
2012-03-31  2.967966
2012-04-30  3.000000

しかし、私は次のようなものを取得したいと思います:

0
2012-02-01  1.000000
2012-03-01  2.000000
2012-04-01  3.000000

コードは次のとおりです。

january = pd.date_range(pd.datetime(2012,1,1),pd.datetime(2012,1,31,23,50),freq='10min')
february = pd.date_range(pd.datetime(2012,2,1),pd.datetime(2012,2,29,23,50),freq='10min')
march = pd.date_range(pd.datetime(2012,3,1),pd.datetime(2012,3,31,23,50),freq='10min')
data_jan = np.zeros(size(january))+1
data_feb = np.zeros(size(february))+2
data_march = np.zeros(size(march))+3
df1 = pd.DataFrame(data_jan,index=january)
df2 = pd.DataFrame(data_feb,index=february)
df3 = pd.DataFrame(data_march,index=march)
df = pd.concat([df1,df2,df3])
df.resample('M',how='mean')

今なら、最終日を次のように削除します。

january = pd.date_range(pd.datetime(2012,1,1),pd.datetime(2012,1,31,00,00),freq='10min')
february = pd.date_range(pd.datetime(2012,2,1),pd.datetime(2012,2,29,00,00),freq='10min')
march = pd.date_range(pd.datetime(2012,3,1),pd.datetime(2012,3,31,00,00),freq='10min')

私は(ほぼ)私が欲しいものを手に入れます:

Out[474]: 
            0
2012-01-31  1
2012-02-29  2
2012-03-31  3

私たちを手伝ってくれますか ????バグですか???

4

1 に答える 1

3

これは確かにバグです。2 つの問題があります。

https://github.com/pydata/pandas/issues/1458

https://github.com/pydata/pandas/issues/1471

これは、pandas 0.8.0 がリリースされる前に修正する必要があります。これは正しく機能することに注意してください。

In [15]: df.resample('M', kind='period')
Out[15]: 
          0
Jan-2012  1
Feb-2012  2
Mar-2012  3

編集: git master でこれを修正しました (上記の参照の問題は両方ともクローズされています)。

于 2012-06-14T17:05:15.500 に答える