2015-07-10 34 views
1

假設我有以下數據集查找最大爲每個業務季度大熊貓列

import pandas as pd, numpy, datetime 

start, end = datetime.datetime(2015, 1, 1), datetime.datetime(2015, 12, 31) 
date_list = pd.date_range(start, end, freq='B') 
numdays = len(date_list) 

value = numpy.random.normal(loc=1e3, scale=50, size=numdays) 
ids = numpy.repeat([1], numdays) 

test_df = pd.DataFrame({'Id': ids, 
       'Date': date_list, 
       'Value': value}) 

我現在想每個業務季度內計算出最大的test_df。一種可能性是使用resample使用rule='BQ', how='max'。但是,我想保留數組的結構,併爲每個BQ生成另一個最大值的列,你們有沒有關於如何執行此操作的任何建議?

+0

我不確定什麼定義了一個商業季度,所以請檢查我的回答是否符合您的期望 – EdChum

+0

顯然,我們並不確定是否 - 因此日曆季度的運作很棒 – Tingiskhan

回答

1

我認爲下面應該爲你的「價值」列工作,這個羣體的季度,並呼籲transform,並與它的指數對準原來的DF返回最大值作爲一個系列:

In [26]: 
test_df['max'] = test_df.groupby(test_df['Date'].dt.quarter)['Value'].transform('max') 
test_df 
Out[26]: 
      Date Id  Value   max 
0 2015-01-01 1 1005.498555 1100.197059 
1 2015-01-02 1 1032.235987 1100.197059 
2 2015-01-05 1 986.906171 1100.197059 
3 2015-01-06 1 984.473338 1100.197059 
........ 
256 2015-12-25 1 997.965285 1145.215837 
257 2015-12-28 1 929.652812 1145.215837 
258 2015-12-29 1 1086.128017 1145.215837 
259 2015-12-30 1 921.663949 1145.215837 
260 2015-12-31 1 938.189566 1145.215837 

[261 rows x 4 columns] 
+0

哇,太棒了!非常感謝你 - 完美無瑕地工作。儘快允許我將其標記爲已回答... – Tingiskhan