2017-09-09 7 views
0

私は、何年にもわたって人口統計のCSVファイルから派生したDataFrame構造を持っています。つまり、ファイルの列は毎月の時間間隔(1999-01、1999-02 ... 2016-12)で、行は世界の異なる人口中心です(ロンドン、トロント、ボストンなど)。Pandas DataFrameの列の抽出とグループ化

df = pd.DataFrame({'1999-01' : [100, 5000, 8000], '1999-02' : [200, 6000, 9000], '1999-03' : [300, 7000, 10000], ..., cities : ['CityA', 'CityB', 'CityC' ...]}) 

私はこれらの列を四半期ごとに分離したいと考えています。だから私は3ヶ月ごとにこれをやって、すべての行のために、1999年から1901年から1999年から1902年、1999から9の平均集団を取り、このエントリの新しい列「1999Q1」を作成します。

df_quarter = pd.DataFrame({'1999Q1' : [200, 6000, 9000], '1999Q2' : ..., cities = ['CityA', 'CityB', 'CityC' ...]}) 

#Q1 corresponds to months 01-03, Q2 to months 04-06, Q3 to months 07-09, Q4 months 10-12, all inclusive 

をしかし、私は、これを達成するためにクエリを概念化するのが難しいです。 .groupby()と.agg()を使用するのは半分ですが、効率的に3列のグループ化を指定して列全体を反復する方法がわかりません。誰かが正しい方向に私を指差してくれますか?

EDIT:列が日付ではなく、より抽象的なものであり、期間の単純な再サンプリングが使用できなかったとします。例:

果物と乳製品を組み合わせた2つの列を作成したい場合は、集計するインデックスを指定する方法はありますか?集計mean

+2

お読み下さい[この](のhttp:// stackoverflowの.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)、良いパンダの質問をする方法を学びます。薄い空気の中からあなたのための例と解決策を作り出す人は誰もいません。 –

+0

適切な編集を行います。 –

答えて

0

あなたがto_period最初にmonth periodに列に、その後to_datetimeとを変換することができますし、列によって、その後resampleaxis=1)とquarterq):

df = pd.DataFrame({'1999-01':[4,5,4,5,5,4], 
        '1999-02':[7,8,9,4,2,3], 
        '1999-03':[1,3,5,7,1,0], 
        '1999-04':[1,3,5,7,1,0], 
        '1999-05':[5,3,6,9,2,4]}, index=list('abcdef')) 

print (df) 
    1999-01 1999-02 1999-03 1999-04 1999-05 
a  4  7  1  1  5 
b  5  8  3  3  3 
c  4  9  5  5  6 
d  5  4  7  7  9 
e  5  2  1  1  2 
f  4  3  0  0  4 

df.columns = pd.to_datetime(df.columns).to_period('m') 
df = df.resample('q', axis=1).mean() 

print (df) 
    1999Q1 1999Q2 
a 4.000000  3.0 
b 5.333333  3.0 
c 6.000000  5.5 
d 5.333333  8.0 
e 2.666667  1.5 
f 2.333333  2.0 
+1

質の低い質問の励ましをやめてください。それが他の誰かが答えるなら、私はすぐに下降したでしょう。そのような質問に答えることによって、あなたはOP以外の誰も将来的に助けてくれることが分かっているような、より多くのそのような質問を奨励します。 –

+2

@cᴏʟᴅsᴘᴇᴇᴅ - ありがとうございます。うーん、私は良い入力データ、希望の出力、コードの場合は答えていることに同意します。それは理想的です。しかし、時にはOPが必要とするテキストから理解することも可能です。だから、私はそれを理解しているようだ、私は答えを作成する。 – jezrael

+0

ここで@cᴏʟᴅsagreeに同意します。私たちはまだ進んで答えたいと思う、私は、OPまたは回答者が質問を再フォーマットし、より良い将来の使用のための詳細を追加する必要がありますと思う。 – Zero

関連する問題