Python 熊猫:每N列的总和

Python 熊猫:每N列的总和,python,pandas,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 我需要每12列计算一次 ID 2016 20

我有数据帧

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'))
但它会返回到所有列 但是当我尝试使用

(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
如何解决此问题?

首先是没有日期的列:

df = df.set_index('ID')
1.
groupby
按ed列并首先选择:

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()
3.将列转换为日期时间和
groupby
年份:

df.columns = pd.to_datetime(df.columns)
df = df.groupby(df.columns.year, axis=1).sum()
4.
年份重新采样

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


如果您不介意丢失标签,可以尝试以下方法:

new_df=df.groupby([i//n表示范围(0,m)中的i)],轴=1.sum()


其中n是要分组在一起的列数,m是要分组的列总数。之后必须重命名列。

上述代码有一个轻微的语法错误,并引发以下错误:

ValueError:对象类型没有名为1的轴

基本上,groupby条件需要用
[]
包装。因此,为了方便起见,我正确地重写了代码:

new_df = df.groupby([[i//n for i in range(0,m)]], axis = 1).sum()
其中,
n
是要分组的列数,
m
是要分组的列总数。之后必须重命名列