2017-10-06 75 views
2

我有數據幀熊貓:每N列的總和

ID 2016-01 2016-02 ... 2017-01 2017-02 ... 2017-10 2017-11 2017-12 
111 12  34   0  12   3  0  0 
222 0   32   5   5   0  0  0 

我需要計算每12列,並得到

ID 2016 2017 
111 46  15 
222 32  10 

我嘗試使用

(df.groupby((np.arange(len(df.columns)) // 31) + 1, axis=1).sum().add_prefix('s')) 

但它返回到所有列 但是,當我嘗試使用

df.groupby['ID']((np.arange(len(df.columns)) // 31) + 1, axis=1).sum().add_prefix('s')) 

它返回

TypeError: 'method' object is not subscriptable 

我該如何解決呢?

回答

4

首先列set_index沒有日期:

df = df.set_index('ID') 

1.groupby通過split編列和第一選定:

df = df.groupby(df.columns.str.split('-').str[0], axis=1).sum() 

2.lambda爲分割功能:

df = df.groupby(lambda x: x.split('-')[0], axis=1).sum() 

轉換列日期時間和groupby年:

df.columns = pd.to_datetime(df.columns) 
df = df.groupby(df.columns.year, axis=1).sum() 

4.resample通過years

df.columns = pd.to_datetime(df.columns) 
df = df.resample('A', axis=1).sum() 
df.columns = df.columns.year 

print (df) 
    2016 2017 
ID    
111 46 15 
222 32 10 
0

如果你不介意丟失標籤,你可以試試這個:

new_df = df.groupby([i//n for i in range(0,m)], axis = 1).sum()

其中n是列數要組合在一起,m是被分組列的總數。之後你必須重命名列。