2017-09-09 85 views
0

我有一個數據框架結構從多年來的人口統計數據的CSV文件中派生而來。即,文件中的列是每月的時間間隔(1999-01,1999-02 ... 2016-12),並且行是世界上不同的人口中心(例如倫敦,多倫多,波士頓等):提取和分組熊貓數據框中的列集合

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

我想按季度分隔這些列。因此,我想借此平均人口從1999年至1901年,1999年至1902年,爲1999-9每一行,併爲此項創建新列「1999Q1」,以每3個月做這個:

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列分組並遍歷列。有人能指點我正確的方向嗎?

編輯:假設列不是日期,而是更抽象的東西,並且不能使用時間段的簡單重新採樣。例如:

#Prices of different foods from different vendors 
df = pd.DataFrame({'oranges' : [2, 3, 7], 'apples' : [6, 3, 9], 'cheese' : [13, 9, 11], 'milk' : [6, 5, 12], 'vendors' : ['VendorA', 'VendorB', 'VendorC']}) 

現在,如果我想創造兩列,結合水果和牛奶製品,是有一些方法我可以指定索引聚集呢?

+2

請仔細閱讀[這](HTTP://計算器.com/questions/20109391/how-to-make-good-reproducible-pandas-examples),並學習如何問一個好的熊貓問題。沒有人會憑空爲您製作實例和解決方案。 –

+0

將進行適當的編輯。 –

回答

0

可以to_datetime然後轉換列month periodto_period第一,然後按列resampleaxis=1)和quarterq)與骨料mean

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ᴏʟᴅsᴘᴇᴇᴅ在這裏。如果我們仍然想繼續並回答,我認爲,OP或回答者應該重新格式化問題/添加詳細信息以獲得更好的未來使用。 – Zero