2015-10-06 72 views
0

我想弄清楚如何將每日日期合併到特定月份併合計屬於特定月份的每日數據。在Excel中使用Python將每日數據合併到月度數據中

注意:我有一個包含日期日期的巨大列表,但我在這裏放了一個小樣本來簡單地舉例。

文件名:(test.xlsx)

爲例(Sheet1中)包含數據幀模式:

 DATE  51  52  53  54  55  56 
    0 20110706 28.52 27.52 26.52 25.52 24.52 23.52 
    1 20110707 28.97 27.97 26.97 25.97 24.97 23.97 
    2 20110708 28.52 27.52 26.52 25.52 24.52 23.52 
    3 20110709 28.97 27.97 26.97 25.97 24.97 23.97 
    4 20110710 30.5 29.5 28.5 27.5 26.5 25.5 
    5 20110711 32.93 31.93 30.93 29.93 28.93 27.93 
    6 20110712 35.54 34.54 33.54 32.54 31.54 30.54 
    7 20110713 33.02 32.02 31.02 30.02 29.02 28.02 
    8 20110730 35.99 34.99 33.99 32.99 31.99 30.99 
    9 20110731 30.5 29.5 28.5 27.5 26.5 25.5 
    10 20110801 32.48 31.48 30.48 29.48 28.48 27.48 
    11 20110802 31.04 30.04 29.04 28.04 27.04 26.04 
    12 20110803 32.03 31.03 30.03 29.03 28.03 27.03 
    13 20110804 34.01 33.01 32.01 31.01 30.01 29.01 
    14 20110805 27.44 26.44 25.44 24.44 23.44 22.44 
    15 20110806 32.48 31.48 30.48 29.48 28.48 27.48 

我想是編輯( 「test.xlsx」,「工作表Sheet1 ')導致以下內容:

 DATE 51  52  53  54  55  56 
    0 201107 313.46 303.46 293.46 283.46 273.46 263.46 
    1 201108 189.48 183.48 177.48 171.48 165.48 159.48 

我該如何去執行此操作?

這裏是我的代碼至今:

import pandas as pd 
from pandas import ExcelWriter 

df = pd.read_excel('thecddhddtestquecdd.xlsx') 

def sep_yearmonths(x): 
    x['month'] = str(x['DATE'])[:-2] 
    return x 

df = df.apply(sep_yearmonths,axis=1) 

df.groupby('month').sum() 

writer = ExcelWriter('thecddhddtestquecddMERGE.xlsx') 
df.to_excel(writer,'Sheet1',index=False) 
writer.save() 
+0

你爲什麼不單獨使用的Excel做呢?它應該使用Python嗎? –

+0

是的,我正在創建一個程序,該程序根據與日期範圍有關的特定數據自動進行多線性迴歸。 – Techno04335

回答

2

如果「日期」是一個字符串列,而不是索引這將工作。

實施例數據幀 - 縮短爲了清楚:

df = pd.DataFrame({'DATE': {0: '20110706', 1:'20110707', 2: '20110801'}, 
        52: {0: 28.52, 1: 28.97, 2: 28.52}, 
        55: { 0: 24.52, 1: 24.97, 2:24.52 } 
        }) 

其中產量:

 52  55 DATE 
0 28.52 24.52 20110706 
1 28.97 24.97 20110707 
2 28.52 24.52 20110801 

應用以下函數在數據幀,以生成新的列:

def sep_yearmonths(x): 
    x['month'] = x['DATE'][:-2] 
    return x 

喜歡這張:

df = df.apply(sep_yearmonths,axis=1) 

在其中,那麼你可以GROUPBY和金額:

df.groupby('month').sum() 

在下列所得:

  52 55 
month  
201107 57.49 49.49 
201108 28.52 24.52 

如果 '日期' 爲索引,只需調用之前reset_index。如果它不是字符串值的列,那麼你需要事先做好。

最後,您可以將'month'列重命名爲'DATE'。我想你可以直接替換'DATE'這一列,但我選擇明確地做事。你可以這樣做:

df['DATE'] = df['DATE'].apply(lambda x: x[:-2]) 

然後'groupby''DATE'而不是月份。

+0

我嘗試實現您的代碼並將其添加到上述問題中。我的日期欄不是我的指數,但是當我嘗試實現的功能是什麼我得到的是類型錯誤(「」「浮動」對象有沒有屬性「__getitem__」」 U」在索引0' 發生)這似乎是引用DF = DF 。適用(sep_yearmonths,軸= 1) – Techno04335

+0

那是因爲你的「日期」一欄是最有可能的「浮動」一欄,而不是字符串。你需要先進行轉換爲字符串。嘗試更換'X [「月」] = X [ 'DATE'] [:2]'與'×〔 '月'] = STR(X [ '日期'])[:2]' – vmg

+0

嗯我試圖這和它的代碼被編譯,但它是不合並任何事情。當我打印它導致完全相同的DF(上圖),我的代碼執行之前所擁有的自由度。也許我失去了一些東西? – Techno04335

0

使用resample

import pandas as pd 
myTable=pd.read_excel('test.xlsx') 
myTable['DATE']=pd.to_datetime(myTable['DATE'], format="%Y%m%d") 
myTable=myTable.set_index('DATE') 
myTable.resample("M").sum() 

enter image description here

相關問題