を高く評価している
データを再構築する方法がわかりません)。
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
、同じRegionName
、State
とdate
と一緒のグループに行を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')
は、[この](https://stackoverflow.com/questions/40497199/how-to-convert-monthly-data-to-を見てくださいパンダ・イン・パンダ/ 40497246#40497246)の回答。 –
@NickilMaveli私があなたが提供したリンクの答えが気に入っています。しかし、グルーパーと軸は同じ長さでなければなりません。このファイルのデータは、2000年1月から2016年8月までのデータです。 –