2017-10-06 11 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 

を持っている私は

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

を使用しようとする。しかし、それは返すごとに12列をカウントし、

ID 2016 2017 
111 46  15 
222 32  10 

を取得する必要がありますすべての列 にしかし、私は

を使用しようとすると、
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') 
splitエド列によって

1.groupbyと第一選択:分割の

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() 
0日付時刻にの

3.変換された列とgroupby年:

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

4.resampleyearsによって:

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

あなたは失うことを気にしない場合ラベル、 nは一緒にグループにしたい列の数であり、mは、グループ化されている列の合計数です

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

:あなたはこれを試すことができます。それ以降の列の名前を変更する必要があります。

関連する問題