我在Python3.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
此数据帧的列名为:
^{pr2}$我想把这个数据帧子集成一个相对较小的数据帧序列,即每个小数据帧只包含一个典型的日记录,例如: 第一个小数据帧包含从“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 help,我尝试了以下代码:
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-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列的精确小时记录呢,i、 e.哪个小时记录(2011-01-01 00:00:00或2011-01-01 03:00:00)的值最大?在
非常感谢
IIUC最好将列作为索引,然后可以
resample
或在当天进行筛选:那你就减少取样
^{pr2}$或当天分组:
相关问题 更多 >
编程相关推荐