熊猫:每N列的总和

Pet*_*rov 2 python pandas

我有数据帧

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
Run Code Online (Sandbox Code Playgroud)

我需要计算每12列并得到

ID   2016   2017
111   46     15
222   32     10
Run Code Online (Sandbox Code Playgroud)

我试着用

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

但它会返回所有列但是当我尝试使用时

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

它回来了

TypeError: 'method' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

jez*_*ael 5

首先set_index是没有日期的列:

df = df.set_index('ID')
Run Code Online (Sandbox Code Playgroud)

1. groupby通过splited列并首先选择:

df = df.groupby(df.columns.str.split('-').str[0], axis=1).sum()
Run Code Online (Sandbox Code Playgroud)

2. lambda分裂功能:

df = df.groupby(lambda x: x.split('-')[0], axis=1).sum()
Run Code Online (Sandbox Code Playgroud)

3.将列转换为日期时间和groupby年份:

df.columns = pd.to_datetime(df.columns)
df = df.groupby(df.columns.year, axis=1).sum()
Run Code Online (Sandbox Code Playgroud)

4. resample通过years:

df.columns = pd.to_datetime(df.columns)
df = df.resample('A', axis=1).sum()
df.columns = df.columns.year
Run Code Online (Sandbox Code Playgroud)
print (df)
     2016  2017
ID             
111    46    15
222    32    10
Run Code Online (Sandbox Code Playgroud)