2016-11-21 4 views
0

は、私のデータフレームは、フォームYYYY-MMの列名のシリーズ、例パンダGoupと名前の変更データフレームの列名のZillowからの住宅値データでの作業

2001-01|2000-02|2000-03|2000-04|...|2016-08 

これらの列のそれぞれは、平均的な家庭の値が含まれてい都市の数のため、その期間のため、状態の組み合わせ

RegionName  State 2000-01 2000-02 2000-03 
Philadelphia PA 53100 53200 53400 

私はグループに列が、それぞれの四半期を必要とし、平均値を提供し、新しいデータフレームにこれを返します。したがって、提供された例では、私は次のようなものを持っています

RegionName  State 2000q1  2000q2 2000q3 2000q4 
Philadelphia PA 53233.33 ... ... ... 

私はこれにどのように取り組み始めたいのか分かりません。私は、列名を引き出し、最後の2文字を取得し、それらを四半分番号を含む辞書にマップすることができますが、それはそれです。すべてのヘルプは非常にこれはMaxU's answerに似ていますが、日付列非日付列(RegionNameState両方をGROUPBYする方法を示し

+1

は、[この](https://stackoverflow.com/questions/40497199/how-to-convert-monthly-data-to-を見てくださいパンダ・イン・パンダ/ 40497246#40497246)の回答。 –

+0

@NickilMaveli私があなたが提供したリンクの答えが気に入っています。しかし、グルーパーと軸は同じ長さでなければなりません。このファイルのデータは、2000年1月から2016年8月までのデータです。 –

答えて

1

を高く評価している

データを再構築する方法がわかりません)。

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'2000-01': [53100], '2000-02': [53200], '2000-03': [53400], 'RegionName': ['Philadelphia'], 'State': ['PA']}) 

melted = pd.melt(df, id_vars=['RegionName', 'State'], var_name='date') 
melted['date'] = pd.PeriodIndex(melted['date'], freq='Q') 
result = melted.groupby(['RegionName', 'State', 'date']).mean() 
result = result['value'].unstack('date') 

利回り

date    2000Q1 
RegionName State   
Philadelphia PA  53233 

まず、単一の列にすべての日付列を合体するpd.meltを使用します。

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'2000-01': [53100], '2000-02': [53200], '2000-03': [53400], 'RegionName': ['Philadelphia'], 'State': ['PA']}) 

melted = pd.melt(df, id_vars=['RegionName', 'State'], var_name='date') 
#  RegionName State  date value 
# 0 Philadelphia PA 2000-01 53100 
# 1 Philadelphia PA 2000-02 53200 
# 2 Philadelphia PA 2000-03 53400 

次に、日付(文字列を変換するためにpd.PeriodIndexを使用?)をpd.Periodに設定します。 pd.PeriodIndexは、同じ期間に異なる日付文字列を変換することができていることに注意してください:

最後に
melted['date'] = pd.PeriodIndex(melted['date'], freq='Q') 
#  RegionName State date value 
# 0 Philadelphia PA 2000Q1 53100 
# 1 Philadelphia PA 2000Q1 53200 
# 2 Philadelphia PA 2000Q1 53400 

、同じRegionNameStatedateと一緒のグループに行をgroupby/meanを使用し、各グループの平均値を計算する:

result = melted.groupby(['RegionName', 'State', 'date']).mean() 
#       value 
# RegionName State date   
# Philadelphia PA 2000Q1 53233 

ここで停止すると、DataFrameは整頓されます(PDF) - 各行は1つの "観測"を表します。これは、しばしばさらなる計算のための最良の形態である。 (このソリューションの第一歩は、元のDataFrameを整形したフォーマットに変換することでした。meltedには、各行が1つの観測を表すという特性もあります)。

ただし、 、あなたは別の列にdateインデックス・レベルを移動することができ:

result = result['value'].unstack('date') 
関連する問題