如何在Python 3.5修改的数据框中找到最大值的确切位置

时间:2016-05-24 18:33:02

标签: python pandas groupwise-maximum

我在Python 3.5中有一个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

此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列,但我怎么能在2011-01-01获取此UNF列的确切小时记录,即哪个小时记录(2011-01-01 00:00:00或2011-01-01 03:00:00)具有最大值?

非常感谢

1 个答案:

答案 0 :(得分:0)

IIUC你最好把列作为索引,然后你可以resample或过滤当天:

df = tway5new.T

然后你下采样

df.resample('d')
那天

或小组:

df.groupby([df.index.year, df.index.month, df.index.day])