[英]group by same partial string of pandas dataframe column
我有幾個csv文件,每個文件包含一個月內的一個股票價格,並具有數百萬個數據。 原始的CSV數據數據如下:
AA_Candy.csv
Index CompanyName Time Price
1 AA Candy 030101090355 1.78
2 AA Candy 030101091533 1.79
.......
333498 AA Candy 031231145556 2.18
BB_Cookie.csv
1 BB Cookie 030101090225 3.20
2 BB Cookie 030101090845 3.14
.......
391373 BB Cookie 031231145958 3.88
在加載並合並一些數據文件后,我使用python和pandas處理數據,現在我有了一個數據框,如下所示:
幀:
Index CompanyName Time Price
1 AA Candy 030101090355 1.78
2 AA Candy 030101091533 1.79
.......
333498 AA Candy 031231145556 2.18
333499 BB Cookie 030101090225 3.20
333500 BB Cookie 030101090845 3.14
.......
712871 BB Cookie 031231145958 3.88
時間031231145958代表2013-12-31 14:59:58
現在我想獲得每個公司每一個小時的最高價格和最終價格,並獲得如下輸出文件:
range_start AA Candy/Max AA Candy/Close BB Cookie/Max BB Cookie/Close
0301010900 1.79 1.77 3.20 3.10
........
0312311400 2.24 2.18 3.88 3.88
因此,我想對公司名稱和時間的前8個字符進行分組,以在一小時內獲得同一公司的數據,然后進行計算以找到每個公司的最大價格值和最終價格值,並在相同的開始時間輸出結果。一排 讓companyName / Max或Close為新列名。
因為我真的是熊貓和數據框的新手,所以我有以下問題:
謝謝!!
對公司名稱和字符串時間戳的前8個字符(即日期加小時)進行groupby
。 然后在價格上使用agg
獲取每個(第一個,最大,最小和最后一個)的自定義函數。 取消堆疊公司名稱,交換公司名稱的級別並打開/高/低/關閉,並選擇對您的代碼進行排序。
gb = (df.groupby(['CompanyName', df.Time.str[:8]])
.Price
.agg({'open': 'first',
'high': np.max,
'low': np.min,
'close': 'last'})[['open', 'high', 'low', 'close']]
.unstack('CompanyName'))
gb.columns = gb.columns.swaplevel(0, 1)
>>> gb.sortlevel(level=0, axis=1)
CompanyName AA Candy BB Cookie
open high low close open high low close
Time
03010109 1.78 1.79 1.78 1.79 3.20 3.20 3.14 3.14
03123114 2.18 2.18 2.18 2.18 3.88 3.88 3.88 3.88
對於第一個問題,您可以使用
df.groupby(df.Time.str[0:8])
對於第二個問題,應根據需要進行unstack
:
df.groupby(df.Time.str[0:8]).unstack()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.