2017-06-05 74 views
-1

下面的代碼行採用的列代表每個月的總銷售額並按季度平均銷售額。使用格式化功能命名列

mdf = tdf[sel_cols].resample('3M',axis=1).mean() 

我需要做的是用str命名列(不能使用pandas .Period函數)。

我試圖使用下面的代碼,但我無法讓它工作。

mdf = tdf[sel_cols].resample('3M',axis=1).mean().rename(columns=lambda x: '{:}q{:}'.format(x.year, [1, 2, 3, 4][x.quarter==1])) 

我想要的列讀... 2000q1,2000q2,2000q3,2000q4,2001q1,...等,但不斷收到錯誤的東西像2000q1,2000q1,2000q1,2000q2,2001q1。

如何使用.format函數使其正常工作。

+2

日期時間列表上執行季度函數'[1,2,3,4] [x.quarter == 1]'這僅會返回' 1'或'2'。 'x.quarter == 1'將始終評估爲'True'或'False',它們分別轉換爲列表的索引'1'或'0'。 – 0x5453

+0

@ 0x5453好的,這是有道理的。無論如何要做到這一點,通過1-4,直到列用完爲止? –

+0

'x.quarter'包含什麼值?如果它已經在1-4範圍內格式化,那麼你可以使用'x.quarter'。如果這是一個越來越多的計數,你可能會做'[1,2,3,4] [x.quarter%4]'。沒有看到任何示例數據很難說。 – 0x5453

回答

0

最簡單的方法是,像這樣

mdf = tdf[sel_cols].resample('3M',axis=1).mean().rename(columns=lambda x: '{:}q{:}'.format(x.year,x.quarter))