У меня есть один DataFrame в Python 3.5, такие как:как найти точное местоположение максимального значения из кадра данных в Python 3.5- модифицирована
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
И имя столбца для этого Dataframe является:
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 в последовательность относительно небольшого фрейма данных, то есть каждый небольшой фрейм данных включал только одну типичную дневную запись, такую как: Первый небольшой фрейм данных содержал информацию от '2011-01-01 00: 00:00 'до' 2011-01-01 23:00:00 ', второй небольшой контур данных с 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-01-01 до 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-01-01 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, но как я могу получить точную запись часа для этой колонки UNF в 2011-01-01, т.е. какая запись часа (2011-01-01 00:00:00 или 2011-01-01 03:00:00) имеет максимальное значение?
Большое спасибо
Спасибо @EdChum. Как вы предположили, я нашел другое решение для этого: 'y1 = tway5new.filter (like = '2011-01-01')' – TWord
Это звучит не очень динамично, так как требуется, чтобы вы передавали строку фильтра каждый time – EdChum
После каждого небольшого подмножества данных, которое я получил, я проведу строку Mean для такого небольшого кадра данных. Поэтому я думаю, что создаю цикл для определения итерации i с 2011-01-01 по 2015-12-31 – TWord