次のように、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) に最大値があるか?
どうもありがとう