1

次のように、Python 3.5 に 1 つの DataFrame があります。

In [1]:tway5new.info()
<class 'pandas.core.frame.DataFrame'>
 Index: 44 entries,  to VOI
 Columns: 43802 entries, 2011-01-01 00:00:00 to 2015-12-31 23:00:00
 dtypes: int64(43802)
 memory usage: 14.7+ MB

このデータフレームの列名は次のとおりです。

In [2]:tway5new.columns
Out[2]: 
DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 01:00:00',
           '2011-01-01 02:00:00', '2011-01-01 03:00:00',
           ...
           '2015-12-31 20:00:00', '2015-12-31 21:00:00',
           '2015-12-31 22:00:00', '2015-12-31 23:00:00'],
          dtype='datetime64[ns]', name='timenew', length=43802, freq=None) 

この DataFrame を比較的小さなデータ フレームのシーケンスにサブセット化したいと考えています。つまり、各小さなデータ フレームには、次のような 1 つの典型的な日の記録のみが組み込まれています。最初の小さなデータ フレームには、「2011-01-01 00:00:00」から「2011-01-01 23:00:00」、2 番目の小さなデータ フレームには、「2011-01-02 00:00:00」から「2011-01-02 23:00:00」までの情報が含まれていました。 1826 番目の小さなデータ フレームまで、「2015-12-31 00:00:00」から「2015-12-31 23:00:00」までの情報が含まれていました。

@EdChum ヘルプによると、次のコードを試しました。

df = tway5new.T 
df.resample('d')
demean = lambda x: abs(x - x.mean())
Asub=df.groupby([df.index.year, df.index.month, df.index.day]).transform(demean)
#TO obtain the absolute difference between hours record and average hours record for each column###
Asubmax=Asub.groupby([df.index.year, df.index.month, df.index.day]).max()
AsubmaxID=Asubmax.idxmax(axis=1)

これにより、列全体、つまり 2011 年 1 月 1 日から 2015 年 12 月 31 日までの各典型的な日の最大値のインデックスが得られました。

with pd.option_context('display.max_rows',10,'display.max_columns',6):
    print (AsubmaxID)
2011  1   1     UNF
          2     NAT
          3     NAT
          4     NAT
          5     NAT

2015  12  27    NAT
          28    NAT
          29    NAT
          30    NAT
          31    GOA
dtype: object


BmaxID=Asub.groupby([df.index.year, df.index.month, df.index.day]).idxmax(axis=1)

これにより、2011 年 1 月 1 日 00:00:00 から 2015 年 12 月 31 日 23:00:00 まで、列全体の各時間レコードの最大値のインデックスが得られました。

with pd.option_context('display.max_rows',10,'display.max_columns',6):
    print (BmaxID)
          timenew            
2011  1   1   2011-01-01 00:00:00    UNF
              2011-01-01 01:00:00    NAT
              2011-01-01 02:00:00    RTF
              2011-01-01 03:00:00    UNF
              2011-01-01 04:00:00    NAT

2015  12  31  2015-12-31 19:00:00    NAT
              2015-12-31 20:00:00    NAT
              2015-12-31 21:00:00    GOA
              2015-12-31 22:00:00    NAT
              2015-12-31 23:00:00    GOA
dtype: object

ここで、正確な時間レコードを使用して典型的な各日の最大値のインデックスを見つける方法、たとえば、最初の日付 2011-01-01 の全体的な最大値のインデックスは UNF 列であることがわかっていますが、正確な時間を取得するにはどうすればよいですか2011 年 1 月 1 日のこの UNF 列のレコード、つまり、どの時間レコード (2011-01-01 00:00:00 または 2011-01-01 03:00:00) に最大値があるか?

どうもありがとう

4

1 に答える 1